java poi导出图片到excel示例代码

本文实例为大家分享了java使用poi导出图片到Excel的具体代码,供大家参考,具体内容如下

代码实现

Controller

/**
 * 导出志愿者/人才数据
 * @param talent_type
 * @return
 */
@RequestMapping("/exportData")
public void exportData(Integer talent_type, HttpServletResponse response) {
  String fileId = UUID.randomUUID().toString().replace("-", "");
  Map<String, Object> param = new HashMap<>() ;
  param.put("talent_type", talent_type) ;
  try {
   List<Map<String, Object>> volunteerMapList = volunteerService.getExportData(param) ;
   String rootPath = SysConfigManager.getInstance().getText("/config/sys/rootPath");
   String filePath = rootPath + "/" + fileId + ".xlsx" ;
   volunteerService.exportData(volunteerMapList, filePath) ;
   // 下载
   FileInputStream inputStream = null;
   try{
     //设置发送到客户端的响应内容类型
     response.reset();
     response.setContentLength((int) new File(filePath).length());
     response.setContentType("application/octet-stream");
     response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode("文件名.xlsx", "UTF-8")+ "\"");
     //读取本地图片输入流
     inputStream = new FileInputStream(filePath);
     // 循环取出流中的数据
     byte[] b = new byte[1024];
     int len;
     while ((len = inputStream.read(b)) > 0)
      response.getOutputStream().write(b, 0, len);
   } finally{
     if(inputStream != null){
      inputStream.close();
     }
   }
   logger.debug("导出志愿者/人才数据成功!");
  } catch (Exception e) {
   e.printStackTrace();
   logger.error("导出志愿者/人才数据异常!");
  }
}

Service

public void exportData(List<Map<String, Object>> volunteerMapList, String filePath) throws Exception {
   String[] alias = {"头像", "名称", "个人/团体", "志愿者/人才", "性别", "生日", "手机号",
       "身份证", "省份", "市", "区/县", "详细地址", "邮箱", "政治面貌", "学历", "民族",
       "职业", "团队人数", "艺术特长", "介绍"};
   String[] keys = {"photo", "name", "type", "talent_type", "sex", "birth_day", "mobile",
       "idcard", "province", "city", "county", "address", "email", "political",
       "education", "nation", "profession", "member_count", "art_spetiality", "content"};
   File file = new File(filePath);
   if (!file.exists()) file.createNewFile();
   FileOutputStream fileOutput = new FileOutputStream(file);
   XSSFWorkbook workbook = new XSSFWorkbook();
   int sheetSize = volunteerMapList.size() + 50;
   double sheetNo = Math.ceil(volunteerMapList.size() / sheetSize);
   String photoImgPath = SysConfigManager.getInstance().getText("/config/sys/rootPath") ;
   for (int index = 0; index <= sheetNo; index++) {
     XSSFSheet sheet = workbook.createSheet();
     workbook.setSheetName(index, "人才、志愿者" + index);
     XSSFRow row = sheet.createRow(0);
     sheet.setColumnWidth(0, 2048);
     XSSFCell cell;
     XSSFCellStyle cellStyle = workbook.createCellStyle();
     XSSFFont font = workbook.createFont();
     font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
     // 居中
     cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
     // 加粗
     cellStyle.setFont(font);
     //创建标题
     for (int i = 0; i < alias.length; i++) {
       cell = row.createCell(i);
       cell.setCellValue(alias[i]);
       cell.setCellStyle(cellStyle);
     }
     int startNo = index * sheetSize;
     int endNo = Math.min(startNo + sheetSize, volunteerMapList.size());
     cellStyle = workbook.createCellStyle();
     // 居中
     cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
     cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
     // 写入各条记录,每条记录对应excel表中的一行
     for (int i = startNo; i < endNo; i++) {
       int rowNum = i + 1 - startNo ;
       row = sheet.createRow(rowNum);
       Map<String, Object> map = (Map<String, Object>) volunteerMapList.get(i);
       for (int j = 0; j < keys.length; j++) {
         cell = row.createCell(j);
         String key = keys[j] ;
         if (key.equals("photo")){
           sheet.addMergedRegion(new CellRangeAddress(i + 1,i + 1,i + 1,i + 1)) ;
           // 头像
           File photoFile = new File(photoImgPath + map.get(key)) ;
           if (photoFile.exists()){
             BufferedImage bufferedImage = ImageIO.read(photoFile) ;
             ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
             ImageIO.write(bufferedImage, "jpg", byteArrayOut);
             byte[] data = byteArrayOut.toByteArray();
             XSSFDrawing drawingPatriarch = sheet.createDrawingPatriarch();
             XSSFClientAnchor anchor = new XSSFClientAnchor(480, 30, 700, 250, (short)0, i + 1, (short) 1, i + 2);
             drawingPatriarch.createPicture(anchor, workbook.addPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG));
             sheet.setColumnWidth((short)500, (short)500);
             row.setHeight((short)500);
           } else {
             cell.setCellType(XSSFCell.CELL_TYPE_STRING);
             cell.setCellValue("");
           }
         } else {
           cell.setCellType(XSSFCell.CELL_TYPE_STRING);
           Object value = map.get(key);
           cell.setCellValue(value == null ? "" : value.toString());
           cell.setCellStyle(cellStyle);
         }
       }
     }
     // 设置列宽
    for (int i = 1; i < alias.length; i++)
       sheet.autoSizeColumn(i);
     // 处理中文不能自动调整列宽的问题
this.setSizeColumn(sheet, alias.length);
   }
   fileOutput.flush();
   workbook.write(fileOutput);
   fileOutput.close();
 }

 // 自适应宽度(中文支持)
 private void setSizeColumn(XSSFSheet sheet, int size) {
   for (int columnNum = 0; columnNum < size; columnNum++) {
     int columnWidth = sheet.getColumnWidth(columnNum) / 256;
     for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
       XSSFRow currentRow;
       //当前行未被使用过
       if (sheet.getRow(rowNum) == null) {
         currentRow = sheet.createRow(rowNum);
       } else {
         currentRow = sheet.getRow(rowNum);
       }
       if (currentRow.getCell(columnNum) != null) {
         XSSFCell currentCell = currentRow.getCell(columnNum);
         if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
           int length = currentCell.getStringCellValue().getBytes().length;
           if (columnWidth < length) columnWidth = length;
         }
       }
     }
     columnWidth = columnWidth * 256 ;
     sheet.setColumnWidth(columnNum, columnWidth >= 65280 ? 6000 : columnWidth);
   }
 }

以上所述是小编给大家介绍java poi导出图片到excel示例代码解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • java实现多图片上传功能

    本文实例为大家分享了java实现多图片上传功能的具体代码,供大家参考,具体内容如下 开发环境:jdk1.7,MyEclipse10 框架用的是spring.用到了maven工具(maven的包百度下就可以). 四步完成,全部复制改参数就可以 第一步:先在Spring中对图片进行限制 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.

  • Java 在PPT中添加混合图表过程详解

    本文将介绍通过Java程序在PPT幻灯片中添加混合图表的方法,即,将不同类型的图表类型放置在同一图表中,用于展示同一时期或阶段的数据在不同参数标准下的变化情况,便于对数据的综合分析. 使用工具:Free Spire.Presentation for Java(免费版) Jar文件获取及导入: 方法1:通过官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Presentation.jar导入java程序.参考如下导入效果: 方法2:通过maven仓库安装导入.可参考导入方法.

  • java实现简单图片上传下载功能

    本文实例为大家分享了java实现简单图片上传下载的具体代码,供大家参考,具体内容如下 1.首先在上传图片界面:将form表单的enctype改为:multipart/form-data 2.定义一个实体类用来将存放图片存放的路径存入到mysql中private String imgpath; 3.在spring容器中注入处理图片的解析器 <bean name="multipartResolver" class="org.springframework.web.multi

  • java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.6</version> </dependency> <!--

  • Java 读取PDF中的文本和图片的方法

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java(免费版) Jar文件获取导入: 方法1:通过官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入java程序.导入后如下图: 方法2: 可通过maven仓库安装导入. Java代码示例 import com.spire.pdf.*; import java

  • Java 图片复制功能实现过程解析

    需求说明 实现思路 见代码注释 代码内容 使用IO复制图片 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * @auther::9527 * @Description: 第十题 * @program: 多线程 * @create: 2019-08-10 00:26 */ pu

  • 2019年最新Java学习路线图

    小编深知广大爱好Java的人学习是多么困难,因此专门整理了新版的学习路线图,不管你是不懂电脑的小白,还是已经步入开发的大牛,这套路线路绝对不容错过! 2019年最新Java学习路线图, 路线图的宗旨就是分享,专业,便利,让喜爱Java的人,都能平等的学习.从今天起不要再找借口,不要再说想学Java却没有资源,赶快行动起来,Java等你来探索,高薪距你只差一步! java学习基础 针对Java零基础入门学习者,比较详细的知识点总结和学习路线 数据库 数据库是程序员必须要掌握中知识点,详细的学习思路

  • java后台接受到图片后保存方法

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程  . Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移植性.多线程.动态性等特点 .Java可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序等 . 第一步:借助于springmvc框架的平台

  • java poi导出图片到excel示例代码

    本文实例为大家分享了java使用poi导出图片到Excel的具体代码,供大家参考,具体内容如下 代码实现 Controller /** * 导出志愿者/人才数据 * @param talent_type * @return */ @RequestMapping("/exportData") public void exportData(Integer talent_type, HttpServletResponse response) { String fileId = UUID.ra

  • Java poi导出Excel下载到客户端

    Java poi 导出Excel并下载到客户端,具体内容如下 Maven配置,包含了其他文件格式的依赖,就全贴出来了 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <gr

  • Java使用poi导出ppt文件的实现代码

    什么是poi Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"Poor Obfuscation Implementation"的首字母缩写,意为"简洁版的模糊实现". poi常用的包 HSSF  - 提供读写Microsoft Excel XLS格式档案的功能. XSSF  - 提供读写Microsoft Excel OOXML

  • Java实现动态获取图片验证码的示例代码

    本文介绍了Java实现动态获取图片验证码的示例代码,分享给大家,具体如下: import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingEx

  • 基于Java的MathML转图片的方法(示例代码)

    Maven依赖: <dependency> <groupId>de.rototor.jeuclid</groupId> <artifactId>jeuclid-core</artifactId> <version>3.1.14</version> </dependency> 示例: @Test public void testMathMlToImg() throws IOException { //MathML

  • Java实现导出word表格的示例详解

    目录 目标 实现 依赖 模版 代码 目标 多级表头.分页.动态数据 实现 依赖 <!-- poi工具类--> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.12.0</version> </dependency> 模版 代码 TableData数据(模版对应的数据对象)

  • 3分钟纯 Java 注解搭个管理系统的示例代码

    最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下. 在我刚开始工作接触的项目都还没做前后端分离,经常需要后端来维护页面,有时候觉得自己好像天生不适合干前端,你要是让我研究研究后端的技术,看个中间件源码啊,分析分析什么框架底层原理啊,这都问题不大,偶尔搞一下JS也可以.你要是让我写个css样式,那简直要命了,一点也提不起兴趣,不知道有没有跟我一样的. 今天要介绍的框架直接不用写页面了,话不多说,下边咱们直奔主题 Erupt一个通用后

  • Java定时调用.ktr文件的示例代码(解决方案)

    1.Maven依赖 <!-- Kettle --> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-core</artifactId> <version>7.1.0.0-12</version> </dependency> <dependency> <groupId>pentaho-kettl

  • JAVA实现DOC转PDF的示例代码

    目录 一.下载依赖 二.代码实现 三.转换结果 四.后续研究 五.总结 Word作为目前主流的文本编辑软件之一,功能十分强大,应用人群广,但是它也存在一些问题.像是Word文件在不同软件或操作平台之间传输的时候,时不时会出现各种格式的"变化",也会有点"不稳定",例如内容和格式经常容易篡动. 相较于Word,pdf格式文件显然优秀不少.虽然在内容编辑和修改方面表现不佳,但pdf格式文件在不同平台和软件上的稳定性表现着实出色.日常办公中,越来越多的会选择将编辑好的Wo

  • Qt实现数据导出到xls的示例代码

    目录 一.前言 二.功能特点 三.体验地址 四.效果图 五.相关代码 一.前言 导入导出数据到csv由于语法简单,适用场景有限,于是乎还是必须再造一个轮子导出数据到xls,在经历过数十年的项目实战经验中不断调整和优化.尤其记得当初第一个版本v0.01大概在2011年左右完成的,当时是公司项目运行在嵌入式板子上,需要导出警情记录,拷贝到电脑上打印,由于嵌入式根本没有也不可能去安装excel等软件,硬着头皮去研究了xml格式的xls文件,按照那个规则组合成简单的导出数据,这个思路想法理论上比QtXl

随机推荐