springboot整合poi读取数据库数据和图片动态导出excel

第一次操作
话不多说就直接上代码

实现代码

需要的依赖

 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.8</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.8</version></dependency>

代码片

// An highlighted blockpublic void upFile(HttpServletRequest request, HttpServletResponse response, String user, String projectName, String filename) throws Exception {SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");System.out.println("正常");List<SwitchOptInfo> switchOptInfo= speedSwitchOptInfoService.selectByProj(user,projectName) ;//项目场景if(switchOptInfo.size()<1)return;String language=RegexUtil.getLanguageType(switchOptInfo.get(0).getProject_scene());//获取语言// 创建一个工作薄HSSFWorkbook wb = new HSSFWorkbook();//创建一个sheetHSSFSheet sheet = wb.createSheet(projectName);HSSFPatriarch patriarch = sheet.createDrawingPatriarch();HSSFRow row = sheet.createRow(0);HSSFCellStyle style = wb.createCellStyle();//设置水平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);style.setWrapText(true);//加边框/*style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);*//*-----------------配置字体颜色☟-----------------*/String str = "#FFFFFF";//处理把它转换成十六进制并放入一个数int[] color=new int[3];color[0]=Integer.parseInt(str.substring(1, 3), 16);color[1]=Integer.parseInt(str.substring(3, 5), 16);color[2]=Integer.parseInt(str.substring(5, 7), 16);//自定义颜色HSSFFontHSSFPalette palette = wb.getCustomPalette();palette.setColorAtIndex(HSSFColor.BLACK.index,(byte)color[0], (byte)color[1], (byte)color[2]);/*----------------配置字体颜色☝-----------------*/HSSFFont font = wb.createFont();//字体颜色font.setColor(HSSFColor.BLACK.index);//设置字体大小font.setFontHeightInPoints((short) 20);//字体font.setFontName("宋体");// 合并单元格CellRangeAddress cra =new CellRangeAddress(0, 0, 0, 7); // 起始行, 终止行, 起始列, 终止列sheet.addMergedRegion(cra);String biaoti="UTEPO XXXSecurity monitoring equipment list";String Total="Total";String[] excelHeader= {"Type", "Picture", "Model","Features","Application area","Num","Price","Subtotal"};//列名String fileName=ft.format(switchOptInfo.get(0).getCreateTime())+switchOptInfo.get(0).getProject_scene()+"  product  list.xls";//文件名if("ZH".equals(language)){biaoti="UTEPO xxx安全监控设备清单";Total="总计";excelHeader[0]="交换机类型";excelHeader[1]="图片";excelHeader[2]="交换机名";excelHeader[3]="详情";excelHeader[4]="应用区域";excelHeader[5]="数量";excelHeader[6]="单价";excelHeader[7]="小计";fileName=ft.format(switchOptInfo.get(0).getCreateTime())+"  "+switchOptInfo.get(0).getProject_scene()+"项目产品清单.xls";}OutputStream outputStream = response.getOutputStream();HSSFCellStyle styl = wb.createCellStyle();Row row9 = sheet.createRow(0);try {String[] excelHeader1={biaoti};for (int j = 0; j< excelHeader1.length; j++) {row9.setHeight((short) (30.7 * 40));styl.setFont(font);//设置水平对齐的样式为居中对齐;styl.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;styl.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);styl.setFillForegroundColor(IndexedColors.SKY_BLUE.getIndex());// 设置背景色styl.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);Cell cell = row9.createCell(j);cell.setCellValue(excelHeader1[j]);cell.setCellStyle(styl);//sheet.autoSizeColumn(i);//设置列宽sheet.setColumnWidth(j, 306 * 30 + 184);}//标题for (int i = 0; i < excelHeader.length; i++) {row = sheet.createRow(1);row.setHeight((short) (20.7 * 30));//设置样式 每列都是水平垂直居中HSSFCell cel = row.createCell(0);cel.setCellValue(excelHeader[0]);cel.setCellStyle(style);HSSFCell cel0 = row.createCell(1);cel0.setCellValue(excelHeader[1]);cel0.setCellStyle(style);HSSFCell cel1 = row.createCell(2);cel1.setCellValue(excelHeader[2]);cel1.setCellStyle(style);HSSFCell cel2 = row.createCell(3);cel2.setCellValue(excelHeader[3]);cel2.setCellStyle(style);HSSFCell cel3 = row.createCell(4);cel3.setCellValue(excelHeader[4]);cel3.setCellStyle(style);HSSFCell cel4 = row.createCell(5);cel4.setCellValue(excelHeader[5]);cel4.setCellStyle(style);HSSFCell cel5 = row.createCell(6);cel5.setCellValue(excelHeader[6]);cel5.setCellStyle(style);HSSFCell cel6 = row.createCell(7);cel6.setCellValue(excelHeader[7]);cel6.setCellStyle(style);sheet.setColumnWidth(i, 156 * 50 + 184);}/**用for循环遍历标题* for (int i = 0; i < excelHeader.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellValue(excelHeader[i]);cell.setCellStyle(style);sheet.autoSizeColumn(i);//设置列宽sheet.setColumnWidth(i, 246 * 30 + 184);// sheet.SetColumnWidth(i, 100 * 256);}*/List<SwitchListExcel> list = speedSceneInfoService.getSwitchlist(user, projectName, language);SwitchListExcel slx;//归类for (int i=0;i<list.size();i++){for(int j=i+1;j<list.size();j++) {//类型与交换机名相同if (list.get(i).getModel().equals(list.get(j).getModel()) && list.get(i).getType().equals(list.get(j).getType())) {slx = list.get(j);//重新设置场景,数量和小计list.get(i).setNum(slx.getNum() + list.get(i).getNum());list.get(i).setScene(list.get(i).getScene() + slx.getScene());list.get(i).setSubtotal(list.get(i).getNum()*list.get(i).getPrice());list.remove(j);j--;}elsebreak;}}int geshu=0;int tupianweiz=0;Double total=0.0;//循环插入excelfor (int i = 0; i < list.size(); i++) {geshu=i + 2;tupianweiz=i + 1;row = sheet.createRow(geshu);row.setHeight((short) (39.7 * 50));SwitchListExcel excelVo = list.get(i);//设置样式 每列都是水平垂直居中HSSFCell cell = row.createCell(0);cell.setCellValue(excelVo.getType());cell.setCellStyle(style);HSSFCell cell1 = row.createCell(2);cell1.setCellValue(excelVo.getModel());cell1.setCellStyle(style);HSSFCell cell2 = row.createCell(3);cell2.setCellValue(excelVo.getFeatures());cell2.setCellStyle(style);HSSFCell cell3 = row.createCell(4);cell3.setCellValue(excelVo.getScene());cell3.setCellStyle(style);HSSFCell cell4 = row.createCell(5);cell4.setCellValue(excelVo.getNum());cell4.setCellStyle(style);HSSFCell cell5 = row.createCell(6);cell5.setCellValue("¥ "+excelVo.getPrice());cell5.setCellStyle(style);HSSFCell cell6 = row.createCell(7);cell6.setCellValue("¥ "+excelVo.getSubtotal());total+=excelVo.getSubtotal();cell6.setCellStyle(style);/*** 该构造函数有8个参数* 前四个参数是控制图片在单元格的位置,分别是图片距离单元格left,top,right,bottom的像素距离* 后四个参数,前连个表示图片左上角所在的cellNum和 rowNum,后天个参数对应的表示图片右下角所在的cellNum和 rowNum,* excel中的cellNum和rowNum的index都是从0开始的* 要传的json数据格式* [{"type":"10001","model":"酒店","features": "2","num":"1","picture":"C:/Users/hjx/Pictures/python/lofter/litreily/1.png"},{"type":"10001","model":"酒店","features": "2","num":"1","picture":"C:/Users/hjx/Pictures/python/lofter/litreily/2.png"}]*/if (i > 2) {ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();BufferedImage bufferImg = null;//图片一System.out.println("5");bufferImg = ImageIO.read(new File(excelVo.getPicture()));ImageIO.write(bufferImg, "png", byteArrayOut);System.out.println(bufferImg);System.out.println(excelVo.getPicture());HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0,(short) 1, (tupianweiz + 1), (short) 1, (i + 2));anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);// 插入图片patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(0.5);} else {ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();BufferedImage bufferImg1 = null;//图片一System.out.println("15");bufferImg1 = ImageIO.read(new File(excelVo.getPicture()));ImageIO.write(bufferImg1, "png", byteArrayOut1);System.out.println(bufferImg1);System.out.println(excelVo.getPicture());HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 0, 0,(short) 1, (tupianweiz + 1), (short) 1, (i + 2));anchor1.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);// 插入图片patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)).resize(0.5);}}row = sheet.createRow(geshu+1);HSSFCell cel21 = row.createCell(7);cel21.setCellValue(Total+": ¥"+total);cel21.setCellStyle(style);response.setContentType("application/vnd.ms-excel;charset=utf-8");//设置文件名称response.setHeader("Content-Disposition", "attachment; filename=" + ExcelUtil.transferName(request,fileName));//解决中文乱码//response.setHeader("Content-disposition", "attachment;filename="+ft.format(date)+""+switchOptInfo+"product list.xls");wb.write(outputStream);//try catch这些关闭流略} catch (Exception e) {e.printStackTrace();} finally {outputStream.flush();outputStream.close();}}

效果图

页面截图:

excel截图:

springboot整合poi读取数据库数据和图片动态导出excel相关推荐

  1. springboot整合poi(使用EXCEL模板导出导入)

    springboot整合poi 依赖 <!-- poi依赖--><dependency><groupId>org.apache.poi</groupId> ...

  2. Springboot整合Poi导出excel(简单版)

    一. 问题引入 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 总所周知Springboot是一个功能强大的微服务框架,集成 ...

  3. Springboot整合Poi导出excel(注解版)

    简介 博客专栏: Springboot整合Poi导出excel(简单版) Springboot整合Poi导出excel(注解版) 上文提到通过poi简单导出Excel后,很多读者反应需要解决导出自适应 ...

  4. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel

    springboot+mybatis+sqlserver导出数据库数据并实现下载到excel 1.准备工作 1.1 下载一个springboot框架demo 1.2 配置maven 1.3 引入需要的 ...

  5. odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表

    [分享-oe嵌入qweb]用js读取数据库数据,用类似html语言重写web报表  (阅读 4403 次) 阿狸 新手上路 帖子: 26 人气: 1 开启阅读模式 [分享-oe嵌入qweb]用js读取 ...

  6. SpringBoot整合chart.js完成数据可视化,展现数据趋势与变化!

    SpringBoot整合chart.js完成数据可视化 项目源码 点击进入github获取源码 一个搭好的SpringBoot微服务框架,简单整合了一些东西,前后端分离,后端只需要向前端 提供JSON ...

  7. java传入数据库生成柱状图_Java读取数据库数据生成柱状图

    此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...

  8. jmeter提取mysql数据_通过jmeter读取数据库数据,并取值作为请求的入参

    为提升测试技能,督促自己学习.故写了这篇文章.测试小白一枚,最近感觉达到了自己认为的瓶颈期.总是有想法,想突破,但是无从入手.工具类用过fiddler.jmeter.charels.postman.. ...

  9. 【SpringBoot整合Mybatis】数据库某字段值为空时,接口未返回该字段 解决办法

    [SpringBoot整合Mybatis]数据库字段为空时,接口不返回该字段 解决办法 问题描述: 排查问题: 解决问题: 测试: 参考资料: 今天整合项目的时候,发现了SpringBoot整合Myb ...

最新文章

  1. [C#]网络编程系列专题二:HTTP协议详解
  2. java怎么创建二进制文件_Java:如何编写二进制文件?
  3. QQ 5.0侧滑HorizontalScrollView以及自定义ViewGroup
  4. Charlse 抓包
  5. memory拷贝与string拷贝的区别
  6. bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
  7. ArturiaFX Collection for Mac(音乐效果器合集) 2021最新
  8. 拿来就能用的前端酷炫登录注册模板
  9. 重装显卡驱动,解决NVIDIA-SMI has failed问题
  10. 2017年网易校招Java面试题
  11. 生活片段(1)-短暂的深圳实习时光
  12. 计算机外部设备培训教学计划,【精品】计算机教学计划4篇
  13. 华科计算机专硕英语几,2020华中科技大学计算机专硕考研成功经验谈
  14. Excel图表设置X轴位置为最底部
  15. Jeesite 4.0 学习笔记
  16. table中 点击某一行变色
  17. 浙江工业大学计算机考研科目,浙江工业大学考研专业目录
  18. linux shell 基本命令大全,常用的Linux shell命令详解收集整理
  19. IDEA中使用Junit4进行测试的入门配置
  20. 集成OpenLDAP与Kerberos实现统一认证(一):整合后台数据库

热门文章

  1. stata统计分析及行业应用案例分析_数据分析之路——描述性统计分析和应用案例...
  2. Linux运行与控制后台进程的方法:nohup, setsid, , disown, screen
  3. 自学Java整套资源
  4. 动态规划5:动态规划与记忆化搜索
  5. MySQL中如何用全库备份恢复单张表
  6. h5打开麦克风权限录音_网页录音时的麦克风权限问题解决
  7. uni-app 录音权限安装时没提醒开启的问题
  8. Codeforces Round #829 (Div. 2)题解
  9. win7如何找出消失不见的语言栏?
  10. 开机蓝屏代码及其处理方法