给前端返回excel表格

返回excel表格函数如下

使用如下方法就直接将excel表格生成返回给前端了

#encoding=utf-8
from io import BytesIO

import xlsxwriter
import datetime

# 定义时间标志变量
import xlwt as xlwt
from django.http import HttpResponse

#result是数据
def export_excel(result):
    sheet_time = datetime.datetime.now()
    sheet_mark = sheet_time.strftime('%Y-%m-%d')
    book_mark = sheet_time.strftime('%Y%m%d')

    # 查询数据结果和字段名字 赋值给两个变量
    result = result  #查询的数据信息
    fields = ['时间','用户','区域','类型','信息'] # 查询到的标题描述信息
    fields_name = ['time','user','area','type','info'] # 查询到的标题描述信息

    response = HttpResponse(content_type='application/vnd.ms-excel')  # 指定返回为excel文件
    response['Content-Disposition'] = 'attachment;filename=export_agencycustomer.xls'  # 指定返回文件名
    wb = xlwt.Workbook(encoding='utf-8')  # 设定编码类型为utf8
    sheet = wb.add_sheet(sheet_mark)  # excel里添加类别

    for field in range(0,len(fields)):
        sheet.write(0,field,fields[field])

    #数据坐标0,0 ~ row,col   row取决于:result的行数;col取决于fields的总数
    for row in range(1,len(result)+1):
        for col in range(0,len(fields_name)):
            sheet.write(row,col,u'%s' % result[row-1][fields_name[col]])

    output = BytesIO()
    wb.save(output)
    output.seek(0)
    response.write(output.getvalue())
    return response

调用这个方法的视图

class ExportLogView(GenericAPIView):
    serializer_class = OperationSerialize
    queryset = Operationlog.objects.all()
    filter_backends = (DjangoFilterBackend,)
    filter_class = OperationFilter

    def get(self, request):
        queryset = self.filter_queryset(self.get_queryset())
        serializer = self.serializer_class(queryset, many=True)
        return export_excel(serializer.data)

 

posted on 2018-12-21 10:20  王大拿  阅读(701)  评论(0)    收藏  举报

导航