博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python项目开发公用方法--excel生成方法

Posted on 2018-09-06 15:01  Yonguos  阅读(277)  评论(0编辑  收藏  举报

在实际开发中,我们有时会遇到数据导出的需求。一般的,导出的文件格式为Excel形式。

那么,excel的生成就适合抽离出一个独立的公用方法来实现:

 1 def generate_excel(excel_name, title_list, properties, data):
 2     """
 3     生成指定的excel文件,并返回文件的路径,文件保存在static/files/excels下,并自动追加时间戳
 4     :param excel_name: 文件名, 注意不要带文件类型后缀
 5     :param title_list: 标题
 6     :param properties: 对应的属性名,方法按照".property_name"的方式获取值
 7     :param data: 数据,建议为query_set
 8     :return: 生成文件的全路径
 9     """
10     now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
11     workbook = xlsxwriter.Workbook("{}/{}{}.xlsx".format(EXCEL_DIR, excel_name, now))
12     worksheet = workbook.add_worksheet(excel_name)
13     worksheet.set_first_sheet()
14     for i in range(len(title_list)):
15         worksheet.set_column('{}:{}'.format(chr(65 + i), chr(66 + i)), 20)
16 
17     excel_format = workbook.add_format()
18     excel_format.set_border(1)
19     excel_format.set_align('center')
20     excel_format.set_text_wrap()
21 
22     format_title = workbook.add_format()
23     format_title.set_border(1)
24     format_title.set_bg_color('#cccccc')
25     format_title.set_align('center')
26     format_title.set_bold()
27 
28     # 表头
29     worksheet.write_row('A1', title_list, format_title)
30     i = 2
31     for datum in data:
32         location = 'A' + str(i)
33         worksheet.write_row(location, [eval("datum.{}".format(key)) for key in properties], excel_format)
34         i += 1
35 
36     workbook.close()
37     file_path = "{}/{}{}.xlsx".format(EXCEL_DIR, excel_name, now)
38     if file_path:
39         os.chmod(file_path, 0777)
40     return file_path

该方法接收必要的数据生成excel,返回最终的路径。