1 from openpyxl import workbook, load_workbook
2 from os.path import isfile
3
4 class ExcelToDict:
5 """
6 将Excel文件对象转成Python字典对象
7 """
8
9 def __init__(self, file_dir, title_row=0):
10 # 工作簿文件的路径
11 self.file_dir = file_dir
12 # 标题行位于第几行
13 self.title_row = int(title_row)
14 self.data_dict = {}
15 self.work_book = None
16
17 def open_object(self):
18 """
19 打开工作簿对象
20 """
21 valid = isfile(self.file_dir)
22 # file_dir指向的文件是否存在
23 if not valid:
24 raise Exception(f'文件路径{self.file_dir}不存在')
25 self.work_book = load_workbook(filename=self.file_dir)
26
27 def read_excel(self):
28 """
29 读取工作簿数据
30 """
31 if not self.work_book:
32 raise Exception('需要先调用open_object()方法打开工作簿对象')
33
34 for sheet_name in self.work_book.sheetnames:
35 # 每个工作表的字典
36 data_dict_sheet = {'title_row':[], 'value_row':{}}
37 # 获取工作表对象
38 ws = self.work_book[sheet_name]
39
40 # 预先创建工作表中每一行的字典
41 for i in range(ws.max_row - 1 - self.title_row):
42 data_dict_sheet['value_row'][i] = {}
43
44 # 遍历所有列
45 columns = tuple(ws.columns)
46 for column in columns:
47 # 每一列的标题
48 title = column[self.title_row].value
49 # 记录每一列的标题
50 data_dict_sheet['title_row'].append(title)
51 row_num = 0
52 # 遍历每一列中的所有值
53 for col in column:
54 # 忽略每一列的标题行
55 if column.index(col) <= self.title_row:
56 continue
57 data_dict_sheet['value_row'][row_num][title] = col.value
58 row_num +=1
59 # 记录每个工作表的数据字段
60 self.data_dict[sheet_name] = data_dict_sheet
61
62
63 if __name__ == '__main__':
64 excel_to_dict = ExcelToDict('G:/Test_framework-master/jianke/Test.xlsx')
65 excel_to_dict.open_object()
66 print(f'工作表:{excel_to_dict.work_book} ' )
67 excel_to_dict.read_excel()
68 print(f'\n读取数据:\n{excel_to_dict.data_dict}')