1 import xlwt 2 import os 3 import datetime 4 5 6 7 #验证export_filed中的字段是否在对象字段中 8 def checkField(obj_list,filed_dict): 9 flag = True 10 msg = '' 11 if obj_list == []: 12 return False,'导出内容为空' 13 else: 14 for i in range(len(obj_list)): 15 for field in filed_dict: 16 try: 17 obj_list[i][field] 18 except: 19 flag = False 20 if len(msg) <=100: 21 msg +='第{0}行未找到{1}字段'.format(i+1,field) 22 else: 23 msg += '....' 24 break 25 return flag, msg 26 27 28 29 #1.存放导出表格的目录 30 #2.table_name:导出的表格名字,不带后缀名,默认为.xls 31 #3. obj_list:需要导出对象集合 ,通过sql语句查询获得的对象集合 32 #4.export_filed:导出的字段和中文的对应关系,字段必须时对象里面包含的, 33 # 如{'name':'名字','age':'年龄'},不可为空,只有在这里的字段才会被导出 34 def tableExportToXlsx(export_dir,table_name,obj_list,filed_dict): 35 36 #1.创建表格 37 workbook = xlwt.Workbook() 38 #创建excel的一个sheet 39 sheet = workbook.add_sheet(table_name,cell_overwrite_ok=True) 40 41 #2.验证export_filed中的字段是否在对象字段中 42 flag,msg = checkField(obj_list,filed_dict) 43 if not flag: 44 return {'msg':msg} 45 else:#通过验证 46 attrs_list = [] 47 #3.在表格第一行写入表格的中文字段,即是表头 48 #将表格字段提取出来转化成数组 49 table_index = [k for k,v in filed_dict.items()] 50 for i in range(len(table_index)): 51 #写入中文字段 52 sheet.write(0,i,filed_dict[table_index[i]]) 53 54 #4.对象导入表格 55 for row in range(len(obj_list)): 56 for col in range(0,len(table_index)): 57 sheet.write(row+1,col,obj_list[row][table_index[col]]) 58 59 #5.存储文件 60 if not os.path.exists(export_dir): 61 os.makedirs(export_dir) 62 #加上导出时间 63 export_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S') 64 file_name = '{0}-{1}.xls'.format(table_name,export_time) 65 save_path = os.path.join(export_dir,file_name) 66 print('文件路径为' + save_path) 67 try: 68 workbook.save(save_path) 69 except: 70 print(export_dir+'目录不存在') 71 72 #6.检查是否导出成功 73 if os.path.isfile(save_path): 74 print('导出成功,文件为'+save_path) 75 return {'msg':'ok','file_name':file_name} 76 else: 77 msg = '存储文件发生异常,检查{0}目录是否存在'.format(export_dir) 78 print(msg) 79 return {'msg':msg}