导出EXCEL、CSV文件

导出csv:

复制代码
# result_data:是需要导出数据(列表里套多个字段的)

# 导出
import csv
try:
    class Echo:
        def write(self, value):
            return value

        def _payload_iterator(header, body):
            use_header = [header[0].encode("utf-8-sig").decode()]
            use_header += header[1:]
            yield [h for h in use_header]
            for d in body:
                yield [d.get(h, "") for h in header]

                bf = Echo()
                data_hdr = list(result_data[0].keys())  # 表头字段
                writer = csv.writer(bf)
                rsp = StreamingHttpResponse(
                    (writer.writerow(r) for r in _payload_iterator(data_hdr, result_data)),
                    content_type="text/csv",
                )
                rsp["Content-Disposition"] = "attachment; filename*=UTF-8''{}.csv;".format(
                    escape_uri_path("表名")
                )

                return rsp
            except Exception as e:
                print("error", e)
                return JsonResponse(
                    {"error": _("没有数据,下载失败")}, json_dumps_params={"ensure_ascii": False}
                )
复制代码

导出excal:

复制代码
import openpyxl
import os
wb = openpyxl.Workbook()
ws = wb.active
ws.append([h for h in fields])
for r in data_to_send:
    excel_ln = [] # 每一行的数据
    for k in fields:
        this_field = r.get(k, "N/A")
        excel_ln.append(this_field)
        ws.append(excel_ln)
        fd = os.path.join("", "download")
        fn = "名字.xlsx")
        wb.save(os.path.join(fd, fn))
        return FileResponse(open(os.path.join(fd, fn), "rb"), as_attachment=True)
复制代码

 

posted @   小渔儿  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示