1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| from openpyxl import load_workbook
class ExcelUtils:
""" 导入Excel header_dic: 表头字典(表头字段大于等于Excel中的表头) { 'name': '姓名', 'sex': '性别', 'age': 'age', 'email': '邮箱' } """ def import_excel(self, *, content: bytes=None, filename: str=None, header_dic: dict) -> list: if content: filename = "content_temp.xlsx" with open(filename, "wb") as f: f.write(content) elif filename: pass else: raise Exception("请传入有效的Excel") try: wb = load_workbook(filename=filename) except Exception as e: raise Exception("请传入有效的Excel") sheet = wb.sheetnames[0] values = wb[sheet].values start_row = 0 header_col = {} data_list = []
for val in values: start_row += 1 if start_row == 1: if set(val).difference(set(header_dic.values())): new_val = tuple(x for x in val if x is not None) if set(new_val).difference(set(header_dic.values())): raise Exception("Excel表头与标准不一致") else: for key, title in header_dic.items(): col = 0 for item in val: if item and item == title: header_col.update({key: col}) break col += 1 else: if not all(item is None for item in val): new_model = {} for key, col in header_col.items(): new_model.update({key: val[col]}) data_list.append(new_model)
wb.close() return data_list
excel = ExcelUtils() header_dic = { 'name': '姓名', 'sex': '性别', 'age': 'age', 'email': '邮箱', 'addr': '地址', 'time': '时间' } data = excel.import_excel(filename="test.xlsx", header_dic=header_dic) print(data)
|