poi的excel导出

news/2024/11/16 4:47:50/文章来源:https://www.cnblogs.com/pyb999/p/18371870

poi的excel导出

这个导出依赖于模板文件,可便捷设置表头样式。 也可以不使用模板,直接创建。

1.引入poi依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>

2.准备模板文件

image

3.编写导出代码

测试代码直接导出到本地,如需要在浏览器中导出将输出流交给浏览器即可

public class GenerateExcel {public static void main(String[] args) throws IOException {GenerateExcelXlsx();}static void GenerateExcelXlsx() throws IOException {List<Student> students = new Student().stuAll();InputStream inputStream = GenerateExcel.class.getClassLoader().getResourceAsStream("static/测试填充excel.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(inputStream);// 获取第一个sheetSheet sheet = workbook.getSheetAt(0);int index = 2;for (Student item : students) {Row row = sheet.createRow(index);row.createCell(0).setCellValue(item.getName());row.createCell(1).setCellValue(item.getSex().toString());row.createCell(2).setCellValue(item.getAge());index += 1;}FileOutputStream outputStream = new FileOutputStream("C:\\Users\\pyb\\Desktop\\a.xlsx");workbook.write(outputStream);outputStream.flush();outputStream.close();}static class Student{private String name;private Integer age;private Character sex;public Student() {}public Student(String name, Character sex, Integer age) {this.name = name;this.sex = sex;this.age = age;}List<Student> stuAll(){ArrayList<Student> list = new ArrayList<>();for (int i = 0; i < 5; i++) {Student student = new Student("张三" + i, '男' ,18 );list.add(student);}return list;}public String getName() {return name;}public Integer getAge() {return age;}public Character getSex() {return sex;}}}

4.运行后效果图

image

5.不依赖模板直接导出

这种方式表头内容需要自己手动写,

public class GenerateExcel {public static void main(String[] args) throws IOException {GenerateExcelXlsx2();}static void GenerateExcelXlsx2() throws IOException {List<Student> students = new Student().stuAll();XSSFWorkbook workbook = new XSSFWorkbook();// 创建一个sheet,这里面形参是内部名称,不可见Sheet sheet = workbook.createSheet();// 设置为第几个sheet,并设置用户可见名称workbook.setSheetName(0,"测试sheet");int index = 0;for (Student item : students) {Row row = sheet.createRow(index);row.createCell(0).setCellValue(item.getName());row.createCell(1).setCellValue(item.getSex().toString());row.createCell(2).setCellValue(item.getAge());index += 1;}FileOutputStream outputStream = new FileOutputStream("C:\\Users\\pyb\\Desktop\\b.xlsx");workbook.write(outputStream);outputStream.flush();outputStream.close();}static class Student{private String name;private Integer age;private Character sex;public Student() {}public Student(String name, Character sex, Integer age) {this.name = name;this.sex = sex;this.age = age;}List<Student> stuAll(){ArrayList<Student> list = new ArrayList<>();for (int i = 0; i < 5; i++) {Student student = new Student("张三" + i, '男' ,18 );list.add(student);}return list;}public String getName() {return name;}public Integer getAge() {return age;}public Character getSex() {return sex;}}}

应用模板表格中的格式

一般应用与固定位置填充完毕的计算,动态的没测试过

数据塞入完毕后加入以下代码

// 计算公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateAll();

总结

获取某行或者某列时候,尽量用创建方式,除非确定行和列都能被获取到(行列不做操作、修改格式的情况下内容是空,会报空指针)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman实操

一、postman参数化 1、{{变量名}} 花括号,时两个括号在环境变量中设置变量参数,作用于所有的接口设置变量:当前所有的接口都可以调用这个参数get中设置变量: http://cms.duoceshi.cn/manage/loginJump.do?userAccount={{u1}}&loginPwd={{p1}} 二、断言 test中的内容详…

Apache SeaTunnel数据处理引擎适配的演进和规划

作者 | Chao Tian (tyrantlucifer),Apache SeaTunnel PMC Member 摘要 Apache SeaTunnel作为一个高性能数据同步工具,以其高效的数据处理能力,为数据集成领域带来了创新。在引擎上,Apache SeaTunnel除了支持自身的Zeta引擎外,还支持Spark和Flink。在2024年的CommunityOver…

读《工程师文化》

1、来源工程师文化2、解读 Mens et manus,拉丁语,意思是 “心智与双手” 或 “智慧与实践”。这句话常常被用来表达理论与实践相结合的理念,强调通过思考(心智)和实际操作(双手)共同推动知识和技术的发展。这也是MIT的校训。一个合格的工程师,必须能够自己动手解决问题…

二极管常见电路符号说明

二极管常见电路符号说明 摘要 本文详细介绍了四种特殊的二极管:TVS二极管用于瞬态电压抑制,响应速度快;肖特基二极管适用于高速电路,导通电压低;隧道二极管利用量子穿隧效应,适用于高频切换;变容二极管则作为可变电容使用,电容量可随电压改变。 二极管简介 普通的二极管…

CSP26

T1题目官方题解考虑暴力,发现奇数边包赢,偶数边如果异或和为\(0\)则输,当然也有特例,比如\(2->4->8->14->\),这\(4\)条边异或为\(0\)但其实必赢, 所以,为了避免这种情况发生,我们使用\(hash\) XORHashing 这样与处理出\(dis\),两点\(u,v\)即为\(dis_u xor dis_…

通过分布式资源分配实现多机器人取货与送货

原文链接:Multi-Robot Pickup and Delivery via Distributed Resource Allocation (youtube.com) Supplemental video for the paper "Multi-Robot Pickup and Delivery via Distributed Resource Allocation". 论文《通过分布式资源分配实现多机器人取货与送货》的…

Java预览PDF时的文件名称问题

直接看问题直接看问题解决思路 看了一下一个有问题的PDF文件之后发现文件的名称和文件的属性名其实不一致,浏览器默认展示的是文件的属性名,而不是我们看到的文件名称这也就让我定位到了问题的所在,出现这个bug的原因就是PDF文件的属性名称与文件名称不一致,定位到问题之后…

从零到一,全面掌握Apache DolphinScheduler发版流程,实战派经验分享!

引言 Apache DolphinScheduler的发版流程对于确保软件质量和社区协作至关重要,社区Committer王兴杰为我们详细介绍了Apache DolphinScheduler的发版流程,包括环境准备、流程文档、基础工具准备、依赖包确认等关键步骤,并指出了发版流程中可能会遇到的麻烦以及相应的解决方案…

对抗训练综述学习笔记

本文基于这篇综述进行讨论学习:《Bai T, Luo J, Zhao J, et al. Recent advances in adversarial training for adversarial robustness[J]. arXiv preprint arXiv:2102.01356, 2021.》对抗训练主要目的是让模型能够对于对抗样本做出正确的判断。常见的对抗样本的生成方式(或…

Chrome谷歌浏览器报错:ERR_TOO_MANY_REDIRECTS

开发系统的时候,经常需要调用地址进行测试,容易遇到浏览器报错:该网页无法正常运作**** 将您重定向的次数过多。尝试删除您的 Cookie.ERR_TOO_MANY_REDIRECTS(如图) 解决方法: 1.删除浏览器缓存记录 2.开启无痕模式,重新浏览

KingbaseES V8R6备份恢复案例之---sys_backup.sh init无法创建stanza

KingbaseES、备份恢复案例说明: KingbaseES V8R6数据库执行物理备份初始化操作,出现以下故障“ERROR: create stanza failed, check log file...",初始化失败。 适用版本:KingbaseES V8R6 一、问题现象 如下所示,执行sys_backup.sh init,出现”ERROR: create stanza…