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}')