小工具知识网

当前位置: 首页 > 行业知识 > excel导出标准化

行业知识

excel导出标准化

2026-11-03 09:25:31 来源:互联网转载

虽���标题叫标准化,只不过是我自己的习惯,当一件事情变得流程标准化之后,开发程序就会飞快,开发评估工作总是 搞个1~2天,实则前端后端一起开发,1个小时就可以搞定。

1 前端

const exportXls = async () => {    var now = moment(new Date()).format('YYYYMMDDHHMMSS')let name = '商品收发明细表.xls'    const res = await proxy.$api.invOrder.goodsRdDetail.export({...condForm.value})    let data = res.data;let url = window.URL.createObjectURL(new Blob([data], ))let link = document.createElement('a')link.style.display = 'none'link.href = url;console.log(link);link.setAttribute('download', now + name)document.body.appendChild(link)link.click()document.body.removeChild(link)}

请求的代码如下

public postOnlyFile = (url: string, data = {} , config: AxiosRequestConfig = {}): Promise =>axios({...this.baseConfig,headers:{...this.baseConfig.headers,'Content-Type': "application/json"},responseType:'blob',url,method: 'post',data,...config,})

2 后端

controller层基本就是复制粘贴,传参数给到service层而已。

    @PostMapping("export")    @ApiOperation("导出商品收发明细表")    public void export(@RequestBody PsiInvOrderReportCondDto condDto, HttpServletResponse response){        //设置响应头        response.setContentType("application/vnd.ms-excel");        response.setCharacterEncoding("utf-8");        //设置防止文件名中文乱码        try {            //设置防止文件名中文乱码            String fileName = URLEncoder.encode("商品收发明细表", "utf-8");            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");            //            if (!CheckEmptyUtil.isEmpty(condDto.getBillDateRange())){                condDto.setStartBillDate(condDto.getBillDateRange().get(0));                condDto.setEndBillDate(condDto.getBillDateRange().get(1));            }            goodsRdDetailService.export(response.getOutputStream(),"xls/GoodsRdDetail.xls", condDto);        } catch (Exception e) {            log.error(e.getMessage(), e);        }    }

service层主要通过easyexcel填充数据

import com.alibaba.excel.EasyExcel;import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.write.metadata.WriteSheet;import com.alibaba.excel.write.metadata.fill.FillConfig;    @Override    public void export(OutputStream outputStream, String pathName, PsiInvOrderReportCondDto condDto) {        List goodsRdDetailListDtos = select(condDto);        int line = 1;        for (GoodsRdDetailListDto goodsRdDetailListDto:goodsRdDetailListDtos){            goodsRdDetailListDto.setLine(String.valueOf(line++));            goodsRdDetailListDto.setBillDateStr(DateUtil.formatDate(goodsRdDetailListDto.getBillDate()));            BusinessTypeEnum businessTypeEnum = BusinessTypeEnum.getInvBusinessTypeEnum(goodsRdDetailListDto.getBusiType());            goodsRdDetailListDto.setBusiType(businessTypeEnum.display());        }        org.springframework.core.io.Resource resource = new ClassPathResource(pathName);        InputStream inputStream = null;        String fileName = DateUtil.getDateRandom() + ".xls";        File file = new File(TmpDic.url + File.separator + fileName);        try {            inputStream = resource.getInputStream();            FileUtils.copyInputStreamToFile(inputStream, file);        } catch (IOException e) {            e.printStackTrace();        }        ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(file).build();        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();        //        WriteSheet sheet0 = EasyExcel.writerSheet(0,"单据明细(不合并表头)")                //单元格//                .registerWriteHandler(new CustomCellWriteHandler())                .build();        excelWriter.fill(goodsRdDetailListDtos, fillConfig, sheet0);        //        PsiAccountSet psiAccountSet = psiAccountSetService.getById(condDto.getAsId());        GoodsRdDetailExcelHeaderDto excelHeaderDto = new GoodsRdDetailExcelHeaderDto();        excelHeaderDto.setCompanyName(psiAccountSet.getName());        excelHeaderDto.setStartBillDate(DateUtil.formatDate(condDto.getStartBillDate()));        excelHeaderDto.setEndBillDate(DateUtil.formatDate(condDto.getEndBillDate()));        excelWriter.fill(excelHeaderDto,sheet0);        //        excelWriter.finish();        file.delete();    }

3 excel模板

定义excel模板,就是上面的xls/GoodsRdDetail.xls

上一篇:超大连接服务器怎么设置?

下一篇:雷丁湖服务器怎么用?