Django使用openpyxl返回excel文件给前端下载

虚拟环境导入

​python学习手册大全点我下载​

pip install openpyxl


views.py代码:


import datetime
from openpyxl import Workbook
def export_data(request, *args, **kwargs):
# 使用get方法
res = {}
if request.method != 'GET':
res['retcode'] = 400
res['status'] = '只支持Get方法'
return JsonResponse(res)
param = request.GET
start_time = param.get('start_time') # 开始时间
end_time = param.get('end_time') # 结束时间
if not start_time or not end_time or start_time > end_time:
res['retcode'] = 500
res['status'] = '请输入正确的开始时间与结束时间'
return JsonResponse(res)
# 获取数据
alert_messages = gsm.AlertMessage.objects.filter(addtime__gt=start_time, addtime__lt=end_time)
datas = gss.AlertMessageSeirializer(alert_messages, many=True).data
if not alert_messages:
res['retcode'] = 500
res['status'] = '当前时间段没有数据'
return JsonResponse(res)
# 创建Excel文件对象
xls_am = Workbook()
sht1_am = xls_am.active
# 把字段名写进Excel表格第一行
sht1_am.append(['序号', '告警id', '设备编号', '线路编号','方位', '告警位置', '经度', '纬度', '具体位置',
'告警类型', '告警等级', '开始时间', '结束时间'])
for data in datas:
# 按行添加进Excel表格
sht1_am.append([
data['id'],
data['alert_id'],
data['device_code'],
data['channel_code'],
data['channel_name'],
data['position'],
data['longitude'],
data['latitude'],
data['address'],
data['alarm_type'],
data['alarm_level'],
data['start_time'],
data['end_time']
])
response = HttpResponse(content_type="application/vnd.ms-excel")
now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
response['Content-Disposition'] = 'attachment;filename={0}-{1}.xlsx'.format(urllib.parse.quote("告警数据"), now)
output = io.BytesIO()  # 创建在内存中处理对象
xls_am.save(output)
xls_am.close()
response.write(output.getvalue())
return response



​python学习手册大全点我下载​

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

公众号

django返回excel文件给前端下载_json

关注我,我们一起成长~~