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

被折叠的 条评论
为什么被折叠?



