问题源头:springBoot项目打jar包后文件资源加载方式不同,打包后Spring试图访问文件系统路径,但无法访问jar中的路径。

解决方案:可以使用 resource.getInputStream() 获取模板的文档流,重写到tomcat容器中并生成新的模板路径,按新的路径,导出excel即可。

public void exportExcel(List<Integer> ids, HttpServletResponse response) {//取到要导出的模板TemplateExportParams params = new TemplateExportParams(convertTemplatePath("\\static\\template\\溯源报表.xls"));System.out.println();//遍历信息使用工具类导出到if (null != params){//根据ids查询出对应的信息List<QrCodeBind> list = qrCodeBindMapper.selectByIds(ids);Map<String, Object> map = new HashMap<>();List<Map<String, Object>> listMap = new ArrayList<>();for (int i = 0; i < list.size(); i++) {Map<String, Object> lm = new HashMap<>();//put的键要跟excel模板中的名称一致String qrCodeNum = list.get(i).getQrCode();byte[] bytes = createQrCode(baseUrl+qrCodeNum, 256, 256);ImageEntity imageEntity = new ImageEntity(bytes, 256, 256);Date createTime = list.get(i).getCreateTime();lm.put("qrCodeNum", qrCodeNum);lm.put("batchNumberName", list.get(i).getBatchNumberName());lm.put("createTime",StringUtils.fromDate(createTime));lm.put("url",baseUrl+qrCodeNum);lm.put("qrCodeImg",imageEntity);listMap.add(lm);}map.put("maplist", listMap);Workbook workbook =  ExcelExportUtil.exportExcel(params, map);ServletOutputStream out = null;try {response.setContentType("application/vnd.ms-excel;charset=UTF-8");//设置导出Excel的名称response.setHeader("Content-disposition", "attachment;filename="+URLEncoder.encode("溯源报表.xls","UTF-8"));out=response.getOutputStream();workbook.write(out);}catch (IOException e){e.printStackTrace();}finally {if (null!=out){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}}/*** 生成二维码* @param content* @param width* @param height* @return*/private byte[] createQrCode(String content, int width, int height){QrConfig config = new QrConfig(width, height);// 设置边距,既二维码和背景之间的边距config.setMargin(3);// 高纠错级别config.setErrorCorrection(ErrorCorrectionLevel.H);// 设置前景色,既二维码颜色(青色)config.setForeColor(new Color(0,0,0).getRGB());// 设置背景色(灰色)config.setBackColor(new Color(242,242,242).getRGB());return QrCodeUtil.generatePng(content, config);}/*Resource读取文件存到Tomcat获取新的地址*/public static String convertTemplatePath(String path) {// 如果是windows则直接返回
//        if (System.getProperties().getProperty("os.name").contains("Windows")) {
//            return path;
//        }Resource resource = new ClassPathResource(path);FileOutputStream fileOutputStream = null;// 将模版文件写入到tomcat临时目录String folder = System.getProperty("catalina.home");File tempFile = new File(folder + File.separator + path);// 文件存在时不再写入if (tempFile.exists()) {return tempFile.getPath();}File parentFile = tempFile.getParentFile();// 判断父文件夹是否存在if (!parentFile.exists()) {parentFile.mkdirs();}try {BufferedInputStream inputStream = new BufferedInputStream(resource.getInputStream());fileOutputStream = new FileOutputStream(tempFile);byte[] buffer = new byte[10240];int len = 0;while ((len = inputStream.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (fileOutputStream != null) {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}return tempFile.getPath();}

记录一次EasyPoi导出excel上线报空指针相关推荐

  1. 编码技巧——使用Easypoi导出Excel、多sheet

    本文主要介绍easypoi导出Excel的代码示例:自己之前手动实现过导出工具类<编码技巧--导出工具类>,基于实体和注解,通过反射来映射实体字段和exce列的关系:在部分工程里面看到了e ...

  2. 使用EasyPOI导出Excel模板数据(含图片)

    使用EasyPOI导出Excel模板数据(含图片) EasyPOI功能如同名字Easy,主打的功能就是容易,让一个没接触过POI的人员可以方便的写出Excel导出,Excel模板导出,Excel导入, ...

  3. 使用easypoi导出excel实现动态列

    使用easypoi导出excel实现动态列 说明 使用的是easypoi进行导出 行头是动态生成 依据key进行列匹配,进行数据填充 第一列进行纵向动态合并 自己的一个使用,记录一下 工具依赖 < ...

  4. 用EasyPoi导出Excel中单元格图片(线上阿里云)

    用EasyPoi导出Excel中单元格图片(线上阿里云): 导出数据需要包含图片 问题描述 提示:这里描述项目中遇到的问题: 数据库中存储图片格式是阿里云(oss)的图片url,导出excel显示图片 ...

  5. EasyPoi导出Excel实现标记颜色

    EasyPoi导出Excel实现标记颜色 PS:不知道EasyPoi 的可以看快速上手文档 <dependency><groupId>cn.afterturn</grou ...

  6. easypoi导出excel不设置样式_EasyPOI 导出excel设置边框,背景颜色,字体样式

    EasyPOI 导出excel设置边框,背景颜色,字体样式 EasyPOI 导出代码示例ExportParams exportParams = new ExportParams(); exportPa ...

  7. 用easyPoi导出excel,带多sheet,合并单元格,合计,单元格金额类型

    用easyPoi导出excel,带多sheet,合并单元格,合计,单元格金额类型 文档连接:http://easypoi.mydoc.io/ 1.引入依赖 <!-- 导出文件工具 EasyPoi ...

  8. EasyPoi导出Excel,完整代码+案例(100%能导出——导不出来砍我)

    java解决,EasyPoi导出Excel,废话不多说,直接上代码 第一步:导入依赖 <!--EasyPoi导入导出 --><dependency><groupId> ...

  9. EasyPoi导出excel文件总是1kb,且打不开

    EasyPoi导出excel文件总是1kb,且打不开 excel文件下载成功后打开文件遇到错误 之前的下载代码 private static void downLoadExcel(String fil ...

  10. Easypoi 导出excel 使用注解实现一二级标题行的单元格合并

    Easypoi 导出excel 使用注解实现一二级标题行的单元格合并 先看一下最终效果图 上代码 Excel 模板实体类 @Data public class HxAdvisoryZJEndExcel ...

最新文章

  1. Matlab与数据结构 -- 如何获取完整文件名
  2. matlab graphminspantree
  3. java基本语句回文数实验_实验二 java基本数据类型与把持语句.doc
  4. 对PASCAL VOC 数据集进行数据增强
  5. 【计算机类】大学生计算机专业常用工具汇总
  6. Scrapy-redis实现分布式爬取的过程与原理
  7. android shape画边框,安卓用shape画圆角矩形边框
  8. [转]计算机视觉之跟踪算法——相关滤波器Correlation Filter
  9. 如何在BIOS里面配置sata硬盘选项
  10. 【专栏精选】实战:使用LeanCloud实现玩家注册
  11. python二进制转十进制代码_python二进制转十六进制代码
  12. hive导数据到mysql 自增主键出错_面试官:MySQL表设计要注意什么?
  13. CentOS7.6下设置mysql服务开机启动
  14. jQuery-4.动画篇---动画基础隐藏和显示
  15. 有人一起用沙雕情侣头像吗?
  16. Vagrant 手册之同步目录 - 基本用法
  17. 随笔 | “郑秋冬”随想
  18. 算法实验-租用游艇问题
  19. C语言【程序21】 题目:打印出如下图案(菱形)
  20. 【RAC】如何修改SCAN IP的IP地址、名称、端口等信息

热门文章

  1. 【px4】编写应用程序
  2. Android开发笔记-简介
  3. Dockerk8s常见面试题
  4. (三)Unity开发Vision Pro——入门
  5. NCRE计算机等级考试Python真题(八)
  6. 前后端分离(蜗牛学苑05)-上传图片前后端处理,图片预览,数据库保存图片数据,数据加密,md5、bcypt加密,认证流程,生成token,前端请求携带token,token配置,认证后处理,统一处理
  7. AXP档案的直接载入搞定
  8. 从酷铺商贸新零售计划入手,来分析海航怎么样
  9. centos yum/dnf 命令安装报错 Error: GPG check FAILED
  10. 狗刨学习网报道:Netmarble与NCsoft互买股票 将合作手游