行业知识
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
上一篇:超大连接服务器怎么设置?
下一篇:雷丁湖服务器怎么用?