网站首页 > 开源技术 正文
最近要做一个Excel文件导出的功能,多方对比下选用Jxls实现,按Excel模板,填充数据,导出文件。Jxls上手相对来说复杂,对于新手可能还有点抽象,所以打算写几篇文章记录下上手过程,后续也会把比较常用的场景,把对应的实现配置分享上来,希望前人栽树后人乘凉,哈哈。
导出Excel一般有Apache POI、JExcelAPI、EasyExcel、Jxls四种方案来实现。
Apache POI、JExcelAPI都是在代码中动态生成 Excel 内容的,需要在代码里调用API实现创建工作簿(Workbook)、工作表(Sheet)、单元格(Cell)等对象,并在代码中设置它们的属性,如单元格的数值、样式、格式等。JExcelAPI是封装了 Apache POI,API更简单易用点。这两种都是比较“死”的实现,说实话真的应对不了“老板”多变的“心”(需求)啊,说不定没写完A001,数据模板已经变成A95887了,代码里面调整太折磨了,当然还是看自己具体的场景来选方案。
Apache POI示例:
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 创建行,并设置行号(索引从0开始)
Row row = sheet.createRow(0);
// 创建单元格,并设置单元格内容
Cell cell1 = row.createCell(0);
cell1.setCellValue("Hello Apache POI");
Cell cell2 = row.createCell(1);
cell2.setCellValue("YesYesYes666");
// 设置单元格样式(可选)
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setBold(true);
style.setFont(font);
cell1.setCellStyle(style);
cell2.setCellStyle(style);
// 保存 Excel 文件
try (FileOutputStream outputStream = new FileOutputStream("文件导出.xlsx")) {
workbook.write(outputStream);
System.out.println("Excel 文件生成成功!");
} catch (IOException e) {
e.printStackTrace();
}
JExcelAPI示例:
try {
// 创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));
// 创建工作表
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 创建并添加单元格
Label label1 = new Label(0, 0, "Hello JExcelAPI");
WritableCellFormat cellFormat = new WritableCellFormat(new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD));
label1.setCellFormat(cellFormat);
sheet.addCell(label1);
Label label2 = new Label(1, 0, "World");
label2.setCellFormat(cellFormat);
sheet.addCell(label2);
// 写入数据并关闭工作簿
workbook.write();
workbook.close();
System.out.println("Excel 文件生成成功!");
} catch (Exception e) {
e.printStackTrace();
}
EasyExcel、Jxls这两种则是可以基于Excel文件模板来实现的。
EasyExcel是阿里开源的(https://easyexcel.opensource.alibaba.com/docs/current/),目前看最新版本是3.3.3,说明文档提到的jxl内存溢出的问题后续文章会提到解决方案,在本文就先不说明。
主要介绍下EasyExcel通过模板生成Excel的方案,直接把官方说明文档的例子“拿来”~。
/**
* 最简单的填充
*
* @since 2.1.1
*/
@Test
public void simpleFill() {
// 模板注意 用{} 来表示你要用的变量 如果本来就有"{","}" 特殊字符 用"\{","\}"代替
String templateFileName =
TestFileUtil.getPath() + "demo" + File.separator + "fill" + File.separator + "simple.xlsx";
// 方案1 根据对象填充
String fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
FillData fillData = new FillData();
fillData.setName("张三");
fillData.setNumber(5.2);
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(fillData);
// 方案2 根据Map填充
fileName = TestFileUtil.getPath() + "simpleFill" + System.currentTimeMillis() + ".xlsx";
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
Map<String, Object> map = MapUtils.newHashMap();
map.put("name", "张三");
map.put("number", 5.2);
EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(map);
}
使用EasyExcel可以满足简单场景下的Excel文件导出,而且是国内开源,中文文档还是很友好的,满足场景的也可以选择这个方案,而且还招成员,感兴趣的可以试试!
那么对于Jxls(https://jxls.sourceforge.net/)来说,优势在于Jxls可以通过Excel模板的填充数据(包括模板格式、样式、内容等),还支持各种如多Sheet页生成、数据循环回填、if判断、动态网格、照片、甚至数据源配置等。永恒java8当然后续选择v2.14.0版本来实现啦。
Jxls可以选择基于Apache POI或Java Excel API实现Excel操作。选择哪一种需要将对应的依赖全部加上才可以正确执行,不然会报错初始化失败、找不到类、找不到方法等错误。本文选择Apache POI。
导入依赖:
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
org.jxls:jxls:2.14.0: jxls是jxls库的核心模块,提供了Excel模板引擎和数据填充功能。它允许您在Excel模板中定义布局,样式和数据填充规则,并通过jxls引擎来处理模板并生成最终的Excel报表。
org.jxls:jxls-poi:2.14.0: xls-poi是jxls与Apache POI集成的模块。它提供了jxls与POI库交互的功能,使得jxls能够与POI一起使用来生成和操作Excel文件。jxls-poi模块实现了jxls引擎与POI API之间的桥梁,使得jxls能够利用POI的功能来生成Excel报表。
org.apache.poi:poi:4.1.2: Apache POI是一个用于操作Microsoft Office文档的Java库,包括对Excel等文件格式的读写功能。poi模块是POI库的核心模块,提供了基本的Excel文件操作功能,如创建、读取、修改和保存Excel文件等。
org.apache.poi:poi-ooxml:4.1.2: poi-ooxml模块是POI库中用于处理OOXML格式(即Office Open XML格式)文件的模块。OOXML是一种基于XML的文件格式,用于存储Microsoft Office文档(如.xlsx格式的Excel文件)。poi-ooxml模块扩展了poi模块,使POI库能够处理OOXML格式的Excel文件。
模版文件:
Context context = new Context();
JxlsHelper.getInstance().processTemplate(in,out, context);
模板是通过批注来配置数据的,通过context传入值。
可以通过这个显示设置是否显示批注:
默认需要在A1位置(第一个单元格)批注模板配置的范围(jx:area),不然会报错:
jx:area(lastCell=”A2”)表示模板配置的跟区域定义为 A1:A2。
取值占位符默认为 ${} ,这个也可以通过重写方法改变。
${name}表示从context中取key为name的值赋值给单元格。
${message}表示从context中取key为message的值赋值给单元格。
更多内容请关注后续更新~
猜你喜欢
- 2024-10-31 Excel填充字母不会?学学这招吧(excel快速填充字母)
- 2024-10-31 vlookup函数傻瓜式的入门教程,每个人都可以学会
- 2024-10-31 共享数据资源,VBA代码导入已有文本数据文件的方法
- 2024-10-31 Excel中的换行符,这几种用法你会哪些?
- 2024-10-31 一文教你在Excel中利用VBA实现类似「邮件合并」的功能!
- 2024-10-31 【Excel】报表里,如何设置仅保留2位小数的万元自定义格式
- 2024-10-31 Xlookup真好用,同时查找多行多列,这个解决方法也太简单了!
- 2024-10-31 Excel问答:如何将分数转化为字母等级或中文等第(CHAR,MID,INT)
- 2024-10-31 Excel实用功能应用,多方式多条件实现数据查询,VBA代码详解
- 2024-10-31 vlookup查找数据,无法区分字母大小写咋办?这3种方法都能搞定
你 发表评论:
欢迎- 最近发表
-
- 电商后台管理系统实战:Vue3+Node.js+Redis全栈开发
- 继程序员奶爸用树莓派自制AI婴儿监视器后,网友实现远程监控
- 连载:2016年最好的JS框架和库(下)
- 2014年最优秀JavaScript编辑器大盘点
- web前端Jquery学习笔记一(web前端中js)
- 开发者必备:10款最佳JavaScript模板引擎
- iOS 17.2 SDK代码确认古尔曼爆料:免开箱更新苹果iPhone系统
- 苹果Xcode 16首个Beta版发布,AI代码补全最少需16GB内存
- 苹果发布iOS/iPadOS 18.4及macOS 15.4 Sequoia第2个公测版
- 告别千篇一律,iOS 16越狱插件K2geIsland玩转iPhone灵动岛
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)