导出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)

浙公网安备 33010602011771号