导出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 @ 2022-01-19 14:47  小渔儿  阅读(179)  评论(0)    收藏  举报