Excel导出带图片详解

导出模板

一、引入的jar

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency>

二、控制层

    @ApiOperation(value = "导出通行记录", notes="")@GetMapping("/export")@Log(action = "导出通行记录")public ResponseInfo export(@ModelAttribute RecDto recDto,HttpServletResponse response){recService.export(recDto,response);return ResponseInfo.ok();}

三、service层

void export(RecDto recDto,HttpServletResponse response);

四、impl层

 @Overridepublic void export(RecDto recDto, HttpServletResponse response) {//查询数据if(StringUtils.isNotBlank(recDto.getStartTime())){recDto.setStartTime(String.valueOf(DateUtils.stringToDate(recDto.getStartTime(), DateUtils.FORMATTER_L).getTime()));}if(StringUtils.isNotBlank(recDto.getEndTime())){recDto.setEndTime(String.valueOf(DateUtils.stringToDate(recDto.getEndTime(), DateUtils.FORMATTER_L).getTime()));}List<RecVo> recVosList = recMapper.pageList(recDto);//excel标题String[] title={"ID","姓名","门禁名称","识别模式","识别结果","抓拍图片","识别时间"};//excel名称String fileName = "通行记录.xls";//sheet名String sheetName = "通行记录";if(recVosList.size() > 0){for (RecVo vo : recVosList) {//识别模式DicDto dicDto = new DicDto(vo.getRecoginMod(), Constant.DIC_REC_MOD_TYPE);List<Dic> dicList = dicService.list(dicDto);vo.setRecoginModStr(dicList.isEmpty() ? null : dicList.get(0).getValue());//识别结果dicDto = new DicDto(vo.getRegResult(), Constant.IDENTIFY_STATUS_TYPE);dicList = dicService.list(dicDto);vo.setRegResultStr(dicList.isEmpty() ? null : dicList.get(0).getValue());vo.setCreateTimeStr(DateUtils.timeStampToDate(vo.getCreateTime(), null));}}HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, recVosList,null,urlFile);//响应到客户端OutputStream os =null;try {this.setResponseHeader(response, fileName);os = response.getOutputStream();wb.write(os);os.flush();} catch (Exception e) {LOGGER.error("导出数据失败"+e);}finally {try {os.close();} catch (IOException e) {LOGGER.error("关闭流失败"+e);}}}/***@Author songmo*@Date 2020/5/6 10:03*@Description 发送响应流方法*/public void setResponseHeader(HttpServletResponse response, String fileName) {try {try {fileName = new String(fileName.getBytes(), "ISO8859-1");} catch (UnsupportedEncodingException e) {LOGGER.error("文件发送到客户端失败");}response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}}

五、ExcelUtil工具类

 public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, List<RecVo> list, HSSFWorkbook wb,String urlFile) {urlFile=urlFile+"/webapps";// 第一步,创建一个HSSFWorkbook,对应一个Excel文件if (wb == null) {wb = new HSSFWorkbook();}// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);// 第三步,在sheet中添加表头第0行HSSFRow row = sheet.createRow(0);row.setHeight((short) 550);// 第四步,创建单元格,并设置值表头 设置表头居中HSSFCellStyle style = wb.createCellStyle();//设置居中style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);//声明列对象HSSFCell cell = null;//创建标题for (int i = 0; i < title.length; i++) {sheet.setColumnWidth(i, 6000);cell = row.createCell(i);cell.setCellValue(title[i]);HSSFFont font = wb.createFont();font.setFontName("黑体");//设置字体大小font.setFontHeightInPoints((short) 15);style.setFont(font);cell.setCellStyle(style);}//抓拍照片BufferedImage bufferImg1 = null;try {//创建内容HSSFCellStyle styleCon = wb.createCellStyle();// 创建一个居中格式styleCon.setAlignment(HorizontalAlignment.CENTER);styleCon.setVerticalAlignment(VerticalAlignment.CENTER);for (int i = 0; i < list.size(); i++) {row = sheet.createRow(i + 1);row.setHeight((short) 1000);RecVo recVo = list.get(i);//将内容按顺序赋给对应的列对象ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();HSSFPatriarch patriarch = sheet.createDrawingPatriarch();//获取图片路径并且处理String baseImage = recVo.getPicUrl();//判断图片是否存在if (null != baseImage && baseImage.length() > 0) {//linux上放开baseImage =urlFile + baseImage;if(new File(baseImage).exists()){bufferImg1 = ImageIO.read(new File(baseImage));ImageIO.write(bufferImg1,"jpg" , byteArrayOut1);//图片一导出到单元格B6中HSSFClientAnchor anchor1 = new HSSFClientAnchor(400, 30, 700, 220,(short) 5, i + 1, (short) 5, i + 1);patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));}}//IDcell = row.createCell(0);cell.setCellValue(recVo.getRybm());cell.setCellStyle(styleCon);//姓名cell = row.createCell(1);cell.setCellValue(recVo.getName());cell.setCellStyle(styleCon);//门禁名称cell = row.createCell(2);cell.setCellValue(recVo.getDoorName());cell.setCellStyle(styleCon);//识别模式cell = row.createCell(3);cell.setCellValue(recVo.getRecoginModStr());cell.setCellStyle(styleCon);//识别结果cell = row.createCell(4);cell.setCellValue(recVo.getRegResultStr());cell.setCellStyle(styleCon);//识别结果cell = row.createCell(6);cell.setCellValue(recVo.getCreateTimeStr());cell.setCellStyle(styleCon);}return wb;} catch (Exception e) {LOGGER.error("导出通行记录数据失败" + e);}return wb;}

linux服务上一定要读取到当前图片的绝对路径!!!!

如:url:/data/tomcat-8.5.4/webapps/picture/d585115bfd374e8a9aafd501835018c9.jpeg

获取路径位置:

@Value("${catalina.home}")
private String urlFile;

导入带图片的功能:https://blog.csdn.net/qq_39381529/article/details/105866121

备注:多个图片可参考:

https://blog.csdn.net/qq_40100817/article/details/82799036?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

Excel导出带图片详解相关推荐

  1. 导出带图片的Excel报表

    导出带图片的Excel报表 先引用 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll程序集,然后在后台页面引用using Excel = Microsof ...

  2. 如何黑掉一个宇宙?一文带你详解Meterpreter后渗透模块攻击(文末赠送免费资源哦~)

    如何黑掉一个宇宙?一文带你详解Meterpreter后渗透模块攻击(文末赠送免费资源哦~) 文末赠送超级干货哈 一.名词解释 exploit 测试者利用它来攻击一个系统,程序,或服务,以获得开发者意料 ...

  3. 斯坦福NLP名课带学详解 | CS224n 第18讲 - 句法分析与树形递归神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  4. 一篇文章带你详解 HTTP 协议

    一篇文章带你详解 HTTP 协议 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信传输流 利用 ...

  5. IBM Thinkpad 自带软件详解

    这是从网上转载的内容,呵呵,希望对有ThinkPad的人有帮助,我找了2个版本的.  版本一:IBM Thinkpad 自带软件详解 1. Software Installer(有中文版): 这是一个 ...

  6. 简书大佬的笔记:一篇文章带你详解 HTTP 协议(网络协议篇一)

    一篇文章带你详解 HTTP 协议(网络协议篇一) 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP ...

  7. Obsidian Pandoc导出带图片的word docx

    Obsidian Pandoc导出带图片的docx 总结 因为有时候需要把文档发给别人,用word更方便一点,体验了一下用Obsidian Pandoc插件转docx,体验还可以,基本的内容:图片.标 ...

  8. mip-img 不启用css,百度mip-img图片详解 如何修改图片MIP

    百度mip-img 图片详解,我们先来看下完整的标签 mip-img layout = responsive width = 350 height = 263 popup alt = www.xhcs ...

  9. 一篇文章带你详解 TCP/IP 协议(下)

    前面的第一二三章已在上篇讲解,还没看过的可以先看看:一篇文章带你详解 TCP/IP 协议(上) 本文继续讲解第四章. 四.网络层中的 IP 协议 IP(IPv4.IPv6)相当于 OSI 参考模型中的 ...

最新文章

  1. MyBatis DAO层开发——Mapper动态代理方式
  2. 3.1.2 操作系统内存管理管些什么?
  3. 三十六、深入Vue.js组件Component(上篇)
  4. MySQL修改数据类型语句
  5. 10字符串及整数操作符
  6. 我两个月来对Quarkus的了解
  7. linux 下脚本安装 mysql_linux(centos7)下编译安装mysql(数据库)一键安装详解+脚本文件...
  8. java apktoo_apktool.jar
  9. 吴恩达《机器学习训练秘籍》中文版58章节完整开源
  10. JAVA面试题,比较经典的面试题
  11. python如何让图片镜像翻转_如何用 Python 增量备份 Roam Research 笔记图片?
  12. 每日算法系列【LeetCode 121】买卖股票的最佳时机
  13. GeoServer设置栅格影像的发布样式
  14. 谈谈web上各种图片应用的优缺点
  15. 仿豆丁flashpaper 网页flash文档播放调用文档资料收集
  16. linux怎么共享打印机驱动程序,Linux下使用局域网中windows 共享打印机
  17. 深度解析C语言文件操作以及常见问题
  18. 2022/12/17 mysql 索引基本原理解读
  19. IC验证-寄存器专项测试
  20. LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码

热门文章

  1. QBQ!问题背后的问题
  2. sja1000 中断_[转载]SJA1000的错误中断处理
  3. 计算机基础考证强化训练范文,计算机基础知识题强化训练.doc
  4. PAT A1155 Heap Paths ——三更灯火五更鸡?
  5. 感冒药盒上请看清这6个字,一定要注意! “美”:支气管炎患者慎用
  6. 冲量在线正式加入中关村可信计算产业联盟,共同推动可信计算产业深度发展
  7. 【C】报错[Error] lvalue required as left operand of assignment
  8. 啊啊,终于搞明白了,原来注解是这么一回事。6000+字理解注解【一】
  9. oracle查询语句中select from where group by having order by的解释与应用
  10. 火狐怎么导入旧的火狐数据_Firefox很棒