EasyExcel填充导出及一些奇怪的问题

使用EasyExcel进行导出时,在本地运行正常,但在服务器上出现找不到文件的问题。通过在代码中添加特定行得以解决。EasyExcel虽然方便,但未指定文件类型时可能将.xls视为.xlsx处理。版本为2.2.11,可能存在流处理或配置问题。

用esayExcel做的导出在本地跑无问题,到服务器上就找不到文件。这个问题可以用下面这行代码解决

	InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("excel/" + templateName + ".xlsx"); //获取文件
	URL url = this.getClass().getClassLoader().getResource("excel/" + templateName + ".xlsx"); //可以方便的获取文件路径,但是

以下是导出方法全部代码,实体类和其他啥的就不贴了没用

		xxx(){
		String templateName = TemplateNameEnum.SALES_REVENUE_VOUCHER.getName();
        String sheetName = ModuleNameEnum.SALES_REVENUE_VOUCHER.getName();
        String fileName = ModuleNameEnum.NIKON.getName() + ModuleNameEnum.SALES_REVENUE_VOUCHER.getName()
                + DateUtil.format(new Date(), DateUtil.PATTERN_DATETIME_MINI);
        InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("excel/" + templateName + ".xlsx");
        List<SalesRevenueVoucherExcel> dataList = BeanUtil.copyProperties(baseMapper.getVoucherExcel(form), SalesRevenueVoucherExcel.class);
        CommonUtil.exportVoucher(response, fileName, sheetName, templateFileName, dataList, SalesRevenueVoucherExcel.class);
		 }


 	/**
     * 导出excel
     *
     * @param response         响应类
     * @param fileName         文件名
     * @param templateFileName 模板路径
     * @param dataList         数据列表
     * @param clazz            class类
     * @param <T>              泛型
     */
    @SneakyThrows
    public static <T> void exportVoucher(HttpServletResponse response, String fileName, String sheetName, InputStream templateFileName, List<T> dataList, Class<T> clazz) {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding(Charsets.UTF_8.name());
        fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");

        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build();
        excelWriter.fill(dataList, writeSheet);
        excelWriter.finish();
    }

用起来还是很方便的。

EasyExcel填充excel读取模板文件xls格式读取成xlsx?

  ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).excelType(ExcelTypeEnum.XLS).withTemplate(templateFileName).build();

EasyExcel判断文件类型的部分,我没有细看,但是如果不设置文件类型且.write()方法传的不是文件或文件地址,easyExcel就会把文件当成.xlsx处理
部分源码:

		if (writeWorkbook.getExcelType() == null) {
            boolean isXls = (file != null && file.getName().endsWith(ExcelTypeEnum.XLS.getValue()))
                || (writeWorkbook.getTemplateFile() != null
                    && writeWorkbook.getTemplateFile().getName().endsWith(ExcelTypeEnum.XLS.getValue()));
            if (isXls) {
                this.excelType = ExcelTypeEnum.XLS;
            } else {
                this.excelType = ExcelTypeEnum.XLSX;
            }
        } else {
            this.excelType = writeWorkbook.getExcelType();
        }

好像是流的问题,也有可能我哪里错了或版本低了,欢迎大佬指教。

记录以下以免忘记

EsayExcel版本:com.alibaba:easyexcel:2.2.11
EsayExcel官网(?):官网

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值