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}