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