我是靠谱客的博主 畅快鸡,这篇文章主要介绍Django 下载excel,支持自定义表头,根据数据库某字段生成多个sheet,现在分享给大家,希望可以做个参考。

工作需要,需要做下载excel的功能,同时根据数据库的某个字段完成多sheet的功能。
由于用处较多,封装了一个函数。

add_worksheet: 为生成多个sheet的方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from io import BytesIO import xlsxwriter def download_excel(cursor, sql_field_index=False, custom_headers=False, sheet_title="worksheet_1"): """ 表格下载 :param cursor: :param custom_headers: 自定义表头 :param sql_field_index: 把该字段数据分成多个sheet :param sheet_title: 单 sheet表,sheet名字 :return: """ x_io = BytesIO() work_book = xlsxwriter.Workbook(x_io) worksheet_dict = dict() worksheet_col_row = {} result_data = cursor.fetchall() field_names = custom_headers if custom_headers else [item.name for item in cursor.description] if sql_field_index: for row in result_data: file_name = row[sql_field_index] if file_name not in worksheet_dict.keys(): worksheet_dict[file_name] = work_book.add_worksheet(file_name) col = 0 for desc in field_names: for current_work_sheet in worksheet_dict.keys(): worksheet_dict[current_work_sheet].write(0, col, desc) worksheet_col_row[current_work_sheet] = [1, 0] col += 1 for colums in result_data: file_value = colums[sql_field_index] work_sheet = worksheet_dict[file_value] for index in range(0, col): current_row, current_col = worksheet_col_row[file_value] work_sheet.write(current_row, current_col, colums[index]) worksheet_col_row[file_value] = [current_row, current_col + 1] worksheet_col_row[file_value] = [current_row + 1, 0] else: worksheet = work_book.add_worksheet(sheet_title) col, row = 0, 0 for desc in field_names: worksheet.write(0, col, desc) col += 1 row, col = 1, 0 for temp in result_data: for value in temp: worksheet.write(row, col, value) col += 1 row += 1 col = 0 work_book.close() return x_io.getvalue()
views:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def write_excel(request): ...... precur = presto.connect('...').cursor() # 根据explain 字段生成多个worksheet,首选获取是sql查询参数中的第几个 sql_field_index = len(csv_hive_sql[title].split('explain')[0].split(',')) precur.execute(sql, (now_dt,)) custom_field_names = [csv_head_map.get(item[0]) for item in precur.description] result = download_excel(precur, sql_field_index, custom_field_names) res = HttpResponse() res["Content-Type"] = "application/octet-stream" res["Content-Disposition"] = 'filename="userinfos.xlsx"' res.write(result) precur.close() return res

根据数据库某个字段生成了3个sheet:
在这里插入图片描述

最后

以上就是畅快鸡最近收集整理的关于Django 下载excel,支持自定义表头,根据数据库某字段生成多个sheet的全部内容,更多相关Django内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部