Skip to content

需要返回一个excel文件

函数本体

python
def 统计到excel(self, request, queryset):
        ### 统计数量和
        def 返回姓名的合计(姓名):
            字典 = queryset.filter(姓名=姓名).aggregate(Sum('******'),Sum('****'))
            return list(字典.values())
        姓名集合 = set(queryset.all().values_list('姓名',flat=True)) #主题去重
        数据列表 = [[姓名,*返回姓名的合计(姓名)] for 姓名 in 姓名集合] #制造数据列表

        rd_book = xlrd.open_workbook('******',formatting_info=True)
        wb = copy(rd_book)  #复制一下表
        wb_sheet = wb.get_sheet(0)
        # 设置单元格格式边框
        borders = xlwt.Borders()
        borders.left = 1
        borders.right = 1
        borders.top = 1
        borders.bottom = 1
        style = xlwt.XFStyle()
        style.borders = borders
        # 设置单元格背景色为黄色
        style1 = xlwt.XFStyle()
        pattern = xlwt.Pattern()
        pattern.pattern = xlwt.Pattern.SOLID_PATTERN
        pattern.pattern_fore_colour = 5  #5是黄色
        style1.pattern = pattern
        style1.borders = borders
        # 设置单元格字体
        font = xlwt.Font()
        font.name = '微软雅黑'
        font.bold = True
        style.font = font

        ## 一行一行往上套公式啊
        for i in range(len(数据列表)):
            for j in range(len(数据列表[i])):
                wb_sheet.write(i+3,j,数据列表[i][j],style)
            当前行 = str(i+4)
            wb_sheet.write(i+3,len(数据列表[i]),xlwt.Formula('B3*B'+当前行+'+C3*C'+当前行+'+D3*D'+当前行+'+E3*E'+当前行+'+F3*F'+当前行+'+G3*G'+当前行+'+H3*H'+当前行+'+I3*I'+当前行+'+J3*J'+当前行+'+K3*K'+当前行+'+L3*L'+当前行+'+M3*M'+当前行+'+N3*N'+当前行+'+O3*O'+当前行+'+P3*P'+当前行),style1)

        wb_sheet.write(len(数据列表)+3,0,'数量合计',style)
        for i in range(len(数据列表[0])-1):
            wb_sheet.write(len(数据列表)+3,i+1,xlwt.Formula('SUM('+chr(66+i)+'4:'+chr(66+i)+str(len(数据列表)+3)+')'),style1)

        wb_sheet.write(len(数据列表)+4,0,'金额合计',style1)
        for i in range(len(数据列表[0])-1):
            wb_sheet.write(len(数据列表)+4,i+1,xlwt.Formula(chr(66+i)+'3*'+chr(66+i)+str(len(数据列表)+4)),style1)
        wb_sheet.write(len(数据列表)+3,len(数据列表[0]),'',style1)
        wb_sheet.write(len(数据列表)+4,len(数据列表[0]),xlwt.Formula('SUM(B'+str(len(数据列表)+4+1)+':P'+str(len(数据列表)+4+1)+')'),style1)
        filename = '提成汇总表'  #中文不行 我也不知道为什么
        response = HttpResponse(content_type='application/vnd.ms-excel')
        response['Content-Disposition'] = 'attachment;filename=%s.xls' % filename
        wb.save(response)
        return response