1. 简介
在 Java 中操作 Excel 文件是常见的需求,无论是读取测试数据、生成报表,还是处理业务数据,都需要与 Excel(.xls 或 .xlsx)进行交互。Java 生态提供了多种库来实现这一功能,从轻量级到企业级工具各有特点。以下是 Java 中操作 Excel 的主流库及其核心特点概述:
- Apache POI:功能全面,支持新旧版 Excel 格式及复杂操作(如公式、图表),但大文件处理时内存消耗高,易内存溢出。
- EasyExcel:基于 POI 优化,采用 SAX 模式逐行读取,适合大数据量操作,内存占用低,API 简洁易用。
- JExcelAPI:轻量级,仅支持旧版 .xls 格式,API 简单,但功能有限,已逐渐被淘汰。
若需兼顾易用性与查询灵活性,Fillo 是一个独特选择。它通过 类 SQL 语法 简化操作,隐藏底层复杂度,尤其适合测试数据管理、快速报表生成等场景,且对小文件性能友善。
什么是Fillo?
Fillo 是 Java 的 Excel API,可以查询 xls 和 xlsx 文件。目前,它支持带或不带 WHERE 子句的 SELECT、UPDATE 和 INSERT 查询。与 JXL API 和 Apache POI 等传统库相比,Fillo 的接口设计显著简化了操作流程。传统库需要开发者手动编写大量代码来遍历行列、提取单元格值,并处理不同数据类型的转换;而 Fillo 在内部自动完成了这些底层逻辑,开发者无需关注行/列索引或单元格格式等细节。更关键的是,Fillo 支持通过 标准 SQL 语句 直接实现数据的增删改查(CRUD),例如用 SELECT * FROM Sheet1 WHERE Age > 25 即可筛选数据,而 Apache POI 实现同等功能需数十行 Java 代码,极大降低了开发复杂度。
2.实战案例
2.1 准备环境
第一,引入依赖
<dependency>
<groupId>com.codoid.products</groupId>
<artifactId>fillo</artifactId>
<version>1.23</version>
</dependency>
最后,准备Excel文件

2.2 Select查询操作
static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void select() throws Exception {
Fillo fillo = new Fillo() ;
Connection conn = fillo.getConnection(file);
String strQuery = "Select * from baseInfo where name='陈浩然'";
Recordset rs = conn.executeQuery(strQuery);
while (rs.next()) {
System.err.printf("%s %s %s %s %s %n",
rs.getField("id"), rs.getField("name"),
rs.getField("age"), rs.getField("email"),
rs.getField("idNo")) ;
}
// 多个Where条件
rs = conn.executeQuery(
"Select * from baseInfo where name='杨晨曦' and age='52'");
while (rs.next()) {
System.out.printf("%s %s %s %s %s %n",
rs.getField("id"), rs.getField("name"),
rs.getField("age"), rs.getField("email"),
rs.getField("idNo")) ;
}
// 通过方法构建where条件
rs = conn.executeQuery("Select * from baseInfo").where("name='黄俊杰'")
.where("idNo='420105200101011000'");
while (rs.next()) {
System.err.printf("%s %s %s %s %s %n",
rs.getField("id"), rs.getField("name"),
rs.getField("age"), rs.getField("email"),
rs.getField("idNo")) ;
}
rs.close();
conn.close();
}
输出结果

2.3 Insert插入操作
static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void insert() throws Exception {
Fillo fillo = new Fillo();
Connection conn = fillo.getConnection(file);
String strQuery = "INSERT INTO baseInfo (id, name, age, email, idNo) VALUES (9, 'Pack张三', 33, 'pack@qq.com', '5555533336666')";
conn.executeUpdate(strQuery);
conn.close();
}
执行结果

控制台输出
5 columns(s) affected
2.4 Update更新操作
static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void update() throws Exception {
// ...
String sql = "Update baseInfo Set name='Spring Boot3实战案例200讲' where id=9";
conn.executeUpdate(sql) ;
// ...
}
执行结果

2.5 Delete删除操作
static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void delete() throws Exception {
// ...
String strQuery = "DELETE FROM baseInfo where id=9";
conn.executeUpdate(strQuery);
// ...
}
执行结果

控制台输出
1 row(s) affected
2.6 Like模糊查询
static String file = "C:UsersMSI-NBDesktopuser.xlsx";
public static void likeQuery() throws Exception {
// ...
String strQuery = "Select * from baseInfo where name like '%陈%'";
Recordset rs = conn.executeQuery(strQuery);
// ...
}
输出结果

2.7 Distinct去重操作
public static void distinctOperator() throws Exception {
// ...
String strQuery = "Select DISTINCT name from baseInfo";
Recordset rs = conn.executeQuery(strQuery);
while (rs.next()) {
System.err.printf("%s%n", rs.getField("name"));
}
// ...
}
准备数据

执行结果

去除重复的姓名。
2.8 设置起始行&列
public static void setRowAndColumn() throws Exception {
// Table start row
System.setProperty("ROW", "1");
// Table start column
System.setProperty("COLUMN", "1");
Fillo fillo = new Fillo();
Connection conn = fillo.getConnection(file);
String strQuery = "Select * from baseInfo";
Recordset rs = conn.executeQuery(strQuery);
// ...
}
输出结果
















暂无评论内容