在实际开发中,我们有时会遇到数据导出的需求。一般的,导出的文件格式为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,返回最终的路径。