pip install openpyxl
from openpyxl import load_workbook
# excel的文件路径
excel_path = r"example1.xlsx"
# 加载一个excel,得到工作薄 Workbook
wb = load_workbook(excel_path)
# 选择一个表单 - 通过表单名 Sheet
sh = wb["Sheet1"]
# 在选择的表单当中,读取某个单元格的数据、修改/写入数据到某个单元格Cell
# excel中的行号和列号都是从1开始
cell_value = sh.cell(2, 3).value # 读取2行3列的单元格的数值
print(cell_value)
result:
23
Process finished with exit code 0
# 得到当前sheet的总行号,总列号
row_nums = sh.max_row
col_nums = sh.max_column
print(f'表格有{row_nums}行,有{col_nums}列')
result:
表格有6行,有4列
Process finished with exit code 0
# 读取表头(即第一行,作为keys),表头的Cell, row都是1
keys = []
for col_index in range(1, sh.max_column + 1):
keys.append(sh.cell(1, col_index).value)
print(f'获取到的keys: {keys}')
result:
获取到的keys: ['姓名', '性别', '年龄', '喜好']
Process finished with exit code 0
# 获取表格的每一行数据
data = list(sh.values)
print(f'表格的所有data: {data}')
keys = data[0] # 获取所有的列名
print(f'获取到的keys: {keys}')
result:
获取到的keys: ['姓名', '性别', '年龄', '喜好']
表格的所有data: [('姓名', '性别', '年龄', '喜好'), ('张三', '男', 23, '打麻将'), ('李四', '男', 24, '打扑克'), ('王五', '男', 25, '斗地主'), ('麻子', '男', 26, '五子棋'), ('李姐', '女', 27, '飞行棋')]
Process finished with exit code 0
# 列表推导式 列表名 = [值 表达式]
# 获取表头
keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
print(f'获取到的keys: {keys}')
result:
获取到的keys: ['姓名', '性别', '年龄', '喜好']
Process finished with exit code 0
keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
for row_index in range(2, sh.max_row + 1):
values = []
# 在每一行里面,从第1列开始,获取所有列的值
for col_index in range(1, sh.max_column + 1):
values.append(sh.cell(row_index, col_index).value)
# print(values)
# keys和values打包 - zip函数
case = dict(zip(keys, values))
print(f'{case}')
result:
{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}
{'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}
{'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}
{'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}
{'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}
Process finished with exit code 0
keys = [sh.cell(1, col_index).value for col_index in range(1, sh.max_column + 1)]
all_data = []
for row in data[1:]:
row_dict = dict(zip(keys, row))
all_data.append(row_dict)
print(f'所有的数据:{all_data}')
result:
所有的数据:[{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}, {'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}, {'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}, {'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}, {'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}]
Process finished with exit code 0
for row in sh.rows:
# print(row)
for item in row:
print(item.value, end=" ")
print()
result:
姓名 性别 年龄 喜好
张三 男 23 打麻将
李四 男 24 打扑克
王五 男 25 斗地主
麻子 男 26 五子棋
李姐 女 27 飞行棋
Process finished with exit code 0
# 给某个单元格写入值
sh.cell(7, 1).value = "get" # 给第7行第1列的单元格写入“get”
# 一旦做了修改,就要保存
# filename如果不是打开的excel文件,那就是另存为
# 如果是打开的excel文件,保存到原文件中
# 保存的时候,要保证没有其它程序在使用当前文件。否则会报Permission Error
wb.save(excel_path)
from openpyxl import load_workbook
class MyExcel:
def __init__(self, excel_path, sheet_name):
# 获取excel的路径
self.excel_path = excel_path
# 加载此excel,得到工作薄 Workbook
self.wb = load_workbook(self.excel_path)
# 获取要操作的sheet name
self.sheet_name = sheet_name
# 选择一个表单 - 通过表单名 Sheet
self.sh = self.wb[self.sheet_name]
# 读取所有表格数据
def read_data(self):
# 注意:接口的请求数据,读取出来是字符串。
# 存储表单下读取到的所有数据 - 每一个成员都是一个字典
all_data = []
data = list(self.sh.values)
keys = data[0] # 获取所有的列名
for row in data[1:]:
row_dict = dict(zip(keys, row))
all_data.append(row_dict)
return all_data
# 获取单元格数据
def get_cell_data(self, row_num, col_num):
cell_value = self.sh.cell(row_num, col_num).value
return cell_value
# 写入单元格数据
def set_cell_data(self, row_num, col_num, cell_value):
self.sh.cell(row_num, col_num).value = cell_value
self.wb.save(self.excel_path)
# 获取总行数
def get_max_row(self):
row_nums = self.sh.max_row
return row_nums
# 获取总列数
def get_max_column(self):
col_nums = self.sh.max_column
return col_nums
# 获取某一行的数据
def get_row_value(self, raw_num):
row_value_list = []
for y in range(2, self.sh.max_column + 1):
value = self.sh.cell(raw_num, y).value
row_value_list.append(value)
return row_value_list
# 获取某一列的数据
def get_column_value(self, col_num):
col_value_list = []
for x in range(2, self.sh.max_row + 1):
value = self.sh.cell(x, col_num).value
col_value_list.append(value)
return col_value_list
if __name__ == '__main__':
# excel的文件路径
excel_path = r"example1.xlsx"
me = MyExcel(excel_path, "Sheet1")
cases = me.read_data()
for case in cases:
print(case)
result:
{'姓名': '张三', '性别': '男', '年龄': 23, '喜好': '打麻将'}
{'姓名': '李四', '性别': '男', '年龄': 24, '喜好': '打扑克'}
{'姓名': '王五', '性别': '男', '年龄': 25, '喜好': '斗地主'}
{'姓名': '麻子', '性别': '男', '年龄': 26, '喜好': '五子棋'}
{'姓名': '李姐', '性别': '女', '年龄': 27, '喜好': '飞行棋'}
{'姓名': 'get', '性别': None, '年龄': None, '喜好': None}
Process finished with exit code 0