本文均以Demo形式给出代码,复制可直接用,如果要结合实际业务请自行应变。内容仅做参考,有啥可改进的或者有更好的思路的欢迎评论、私信哦。

依赖

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.0</version></dependency>

测试用实体类

@Data
public class Demo {private String name;private String age;private String phone;
}

关于填充内容我知道的有两种方式,一种是直接在指定位置进行填充,一种是识别标题,在对应的标题下填充。

1.在指定位置进行填充

public void demo(HttpServletResponse response, HttpServletRequest request) throws IOException, IllegalAccessException, ParseException {Demo demo = new Demo();Demo demo1 = new Demo();List<Demo> demos = new ArrayList<>();demo.setName("111");demo.setAge("222");demo.setPhone("333");demos.add(demo);demo1.setName("222");demo1.setAge("333");demo1.setPhone("444");demos.add(demo1);InputStream is = this.getClass().getResourceAsStream("/测试.xlsx");//获取excel模板信息,我放置项目resources目录下XSSFWorkbook workbook = new XSSFWorkbook(is);XSSFSheet sheetAt = workbook.getSheetAt(0);//获取第一张表格//从单元格第一行开始录入for (int i = 0; i < demos.size(); i++) {Field[] fields = demos.get(i).getClass().getDeclaredFields();XSSFRow xssfRow = sheetAt.createRow(i);//创建行for (int j = 0; j < fields.length; j++) {Field f = fields[j];f.setAccessible(true);//类中的成员变量为private,故必须进行此操作XSSFCell cell = xssfRow.createCell(j);//创建单元格cell.setCellValue(String.valueOf(f.get(demos.get(i)))); //设置单元格内容}}response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);//attachment为以附件方式下载response.setHeader("Content-Disposition", "attachment;filename=" +              URLEncoder.encode("测试.xls","utf-8"));response.setHeader("Cache-Control", "No-cache");response.flushBuffer();workbook.write(response.getOutputStream());workbook.close();}

2.识别标题进行填充

public void demo(HttpServletResponse response, HttpServletRequest request) throws IOException, IllegalAccessException, ParseException {Demo demo = new Demo();Demo demo1 = new Demo();List<Demo> demos = new ArrayList<>();demo.setName("111");demo.setAge("222");demo.setPhone("333");demos.add(demo);demo1.setName("222");demo1.setAge("333");demo1.setPhone("444");demos.add(demo1);InputStream is = this.getClass().getResourceAsStream("/测试.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(is);XSSFSheet sheetAt = workbook.getSheetAt(0);//获取第一张表格XSSFRow row = sheetAt.getRow(0);//获取标题,我的标题是表格的第一行,所以获取第一行数据int physicalNumberOfCells = row.getPhysicalNumberOfCells();//获取标题列数for (int j = 0; j < demos.size(); j++) {XSSFRow xssfRow = sheetAt.createRow(j + 1);//创建行(因为第一行是标题,所以从第二行开始插入)for (int i = 0; i < physicalNumberOfCells; i++) {XSSFCell titleCell = row.getCell(i);//获取标题单元格if (titleCell != null) {String titleCellValue = row.getCell(i).getStringCellValue();//获取标题单元格内容XSSFCell xssfCell = xssfRow.createCell(i);//创建单元格if (titleCellValue.equals("姓名")) {xssfCell.setCellValue(demos.get(j).getName()); //设置单元格内容} else if (titleCellValue.equals("年龄")) {xssfCell.setCellValue(demos.get(j).getAge()); //设置单元格内容} else if (titleCellValue.equals("手机号")) {xssfCell.setCellValue(demos.get(j).getPhone()); //设置单元格内容}}}}response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);//attachment为以附件方式下载response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("测试.xls","utf-8"));response.setHeader("Cache-Control", "No-cache");response.flushBuffer();workbook.write(response.getOutputStream());workbook.close();}

补充内容(这是我知道的比较常用的方法)

 XSSFSheet sheetAt = workbook.getSheetAt(0);//获取第一张表格XSSFRow row = sheetAt.getRow(0);//获取行XSSFCell xssfCell = row.createCell(0);//获取列XSSFCellStyle style = xssfCell.getCellStyle();//获取样式XSSFFont font = style.getFont();//获取字体style.setBorderBottom(BorderStyle.THIN); //下边框style.setBorderLeft(BorderStyle.THIN);//左边框style.setBorderTop(BorderStyle.THIN);//上边框style.setBorderRight(BorderStyle.THIN);//右边框font.setFontHeightInPoints((short) 16);//设置字体大小style.setFont(font);//替换字体样式style.setAlignment(HorizontalAlignment.CENTER);xssfCell.setCellStyle(style);//替换样式xssfCell.setCellValue("123123");//替换内容

java使用poi实现Excel数据填充并生成文件相关推荐

  1. java 利用POI 读取Excel数据的真实有效行数

    前言 最近发现java导入excel数据时,我的excel数据明明只有4条数据,可是java程序却读取到了第6行.检查代码发现5.6行不小心设置了行高,导致poi的getLastRowNum()方法读 ...

  2. Java使用Poi读取Excel数据(exor)

    读取Excel使用一个小工具exor exor是一个开源项目,封装了一些poi读取excel的操作,可以读取excel数据并格式化为二维结构 xlsx和xls格式都可以读取 exor的依赖:commo ...

  3. Java使用poi读取excel数据(excel可能很大,先转换为csv再读取)

      ------------配置------------   jdbc.properties中加入: excelUrl=/--xlsx文件目录路径/ (excelUrl + "xxxx.xl ...

  4. java使用poi的excel数据导出及线上预览

    工作中经常会遇到需要从数据库中获取数据,整理后导出数据到excel中提供其他人员下载或者查看,整体功能并不复杂,今天提供一个基于poi工具+永中云预览的excel通用导出在线查看的方法 maven依赖 ...

  5. Java使用POI导出Excel .xlsx提示文件格式或文件扩展名有误

    目录 1.前端如果用xlsx格式接收表格 2.前端如果用xls格式接收表格 1.前端如果用xlsx格式接收表格 后台用XSSFWorkbook workbook = new XSSFWorkbook( ...

  6. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  7. poi操作excel之填充数据、删除行

    poi操作excel之填充数据.删除行 每篇一句励志:有人说,这世间有两种浪漫,一种是相濡以沫,另一种是相忘于江湖. 废话不多说,直接上代码! // 获取到你要填充数据的sheet XSSFSheet ...

  8. Java读取和解析Excel数据:基于Apache POI(二)

    Java读取和解析Excel数据:基于Apache POI(二) 假设附录1文章中的test.xls是对员工的考勤记录表.需要根据这张excel表统计员工的加班时间,那么需要重点关注第五列的下班时候的 ...

  9. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

最新文章

  1. python小白逆袭大佬_飞桨深造学院百度深造7天打卡第6期:python小白反攻大神的经验,深度,学习,日,第六期,Python,小白逆袭,结营,心得...
  2. dojo gridx修改表头
  3. 【学习小记】一般图最大匹配——带花树算法
  4. Facebook推出Pythia 开源 可用于图像及语言分析
  5. JQuery validate 各项验证规则讲解
  6. 卷积交织/解交织C++程序
  7. Android 记忆卡片游戏 记忆力 Android游戏 Android记忆卡片游戏源代码
  8. Python基础: python3书籍推荐
  9. 一次惨痛的微软AA面经历
  10. uniapp 电商小程序 置顶特效/分享特效/红包特效 简单实现效果
  11. 「快闪群」批量成交攻略
  12. python-基础杂集
  13. 【音频】削波失真(爆音)问题定位与解决
  14. 2022年度总结:除旧迎新,继往开来!
  15. 哈希(哈希表的应用)
  16. 终于来啦!DALL·E API公测开始;从加减乘除到机器学习·系列电子书;Python技术面试题库;新型AI图片库;前沿论文 | ShowMeAI资讯日报
  17. 男人必听九大歌曲精选
  18. 转行程序员日记--2020-08-10
  19. sql注入学习笔记(4)--sqlmap注入心得
  20. 奶爸日记10 - 爸爸妈妈觉得你泠

热门文章

  1. speedoffice中Word如何设置暗色模式主题
  2. Mac 内置最强WI-FI抓包工具 Airport
  3. linux能用airport吗_为什么都用Linux作为云主机的操作系统?
  4. java swing课程表设计_阶段2:手把手快速做一个Java swing mysql学生选课系统附带完整源码及视频开发教程【猿来入此自营】...
  5. 怎么改造http服务器响应soap,SOAP HTTP 绑定
  6. Python编写微信打飞机小游戏(五)
  7. Java SSM 重制版(三)SpringSecurity
  8. java获取当前时间所在一周的周一和周日日期
  9. 《人生终要有一场触及灵魂的旅行》 毕淑敏 (又一碗没有心灵鸡胸的心灵鸡汤)
  10. JAVA计算机毕业设计动物园管理系统Mybatis+系统+数据库+调试部署