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}