Django+angular export excel report

Django

1.urls

urlpatterns = [
path('excel-download/',QuestionnaireSurveyResultViewSet.as_view({
    
    'post': 'questionnaireSurvey_Result_excel'}))]

2.views

import xlwt as xlwt
from rest_framework.response import Response
from rest_framework import viewsets

class QuestionnaireSurveyResultViewSet(viewsets.ModelViewSet):
    '''
        量表管理页面中的结果查询
        导出Excel
    '''
    def questionnaireSurvey_Result_excel(self, request):
        try:
            # 查询条件
            query_param = request.data
            datas = query_param.get('datas')
            fee_pool = query_param.get('fee_pool')
            excel = xlwt.Workbook()
            style = xlwt.XFStyle()
            datastyle = xlwt.XFStyle()
            datastyle.num_format_str = 'yyyy/m/d'
            al = xlwt.Alignment()
            al.horz = 0x02
            al.vert = 0x01
            style.alignment = al
            datastyle.alignment = al

            if fee_pool == 'undefined' or fee_pool == '' or fee_pool == 'entrust_plan':
                sheet = excel.add_sheet(u'量表结果导出', cell_overwrite_ok=True)
                # 设置列宽,一个中文等于两个英文等于两个字符,11为字符数,256为衡量单位
                sheet.col(0).width = 24 * 256
                sheet.col(1).width = 24 * 256
                sheet.col(2).width = 24 * 256
                sheet.col(3).width = 24 * 256
                sheet.col(4).width = 24 * 256
                sheet.col(5).width = 24 * 256
                sheet.col(6).width = 24 * 256
                sheet.write(0, 0, '问卷标题', style)
                sheet.write(0, 1, '用户名', style)
                sheet.write(0, 2, '姓名', style)
                sheet.write(0, 3, '所属部门', style)
                sheet.write(0, 4, '完成情况', style)
                sheet.write(0, 5, '分数', style)
                sheet.write(0, 6, '评级', style)
                n = 1
                if fee_pool == 'entrust_plan':
                    for data in datas:
                        print(data)
                        sheet.write(n, 0, data['title'], style)
                        sheet.write(n, 1, data['username'], style)
                        sheet.write(n, 2, data['name'], style)
                        sheet.write(n, 3, data['user_dept'], style)
                        sheet.write(n, 4, data['status_ans'], style)
                        sheet.write(n, 5, data['score'], style)
                        sheet.write(n, 6, data['level'], style)
                        n = n + 1
                        if (n == 65530):
                            break
            excel.save('media/file_export/questionnaireSurvey_Result_excel.xls')
            return Response(
                {
    
    'code': 2000, 'errCode': 0, 'errMessage': '成功导出', 'data': {
    
    'path': '/media/file_export/questionnaireSurvey_Result_excel.xls'}})
        except Exception as e:
            print(e)
            return Response({
    
    'code': 100, 'errCode': 1, 'errMessage': '导出失败', 'data': {
    
    }})

Angular

Html

<button
        nz-button
        nzType="link"
        [disabled]="
          dataSeleted.length === 0
        "
        (click)="downLoad()"
      >
        <i nz-icon nzType="download"></i>导出选中的量表结果
      </button>

ts

//下载选中的数据
  downLoad(){
    
    
    const obj = {
    
     datas: this.dataSeleted, fee_pool: 'entrust_plan' };
    console.log('obj',obj);
    let downURl: string;
    this.httpServe.post('/api/system/excel-download/',obj).subscribe(
      (r: any) => {
    
       
        downURl = this.httpServe.url + r.path;
        console.log('downURl',downURl);
          // 以动态创建a标签进行下载
        const a = document.createElement('a');
        const nowDate = new Date().getTime();
        a.href = downURl;
        a.download = '量表结果' + nowDate + '.xls';
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        }
    );
  }

Guess you like

Origin blog.csdn.net/weixin_45876175/article/details/130913323