jxl 是一个轻量级、简单易用的 Java 操作 Excel 的老牌库,虽然现在有更强大的 Apache POI,但对于简单的 Excel 导出任务,jxl 依然是一个非常不错的选择。

准备工作:添加 JXL 依赖
你需要在你的项目中添加 jxl 的依赖,如果你使用 Maven,请在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version> <!-- 这是最常用且稳定的版本 -->
</dependency>
如果你不使用 Maven,可以直接从 JXL 官方网站 下载 .jar 文件,并将其添加到你的项目的类路径(Classpath)中。
JXL 导出 Excel 核心步骤
使用 jxl 导出一个 Excel 文件,通常遵循以下核心步骤:
- 创建
WritableWorkbook对象:这是可写的 Excel 工作簿对象,代表了你要创建的整个 Excel 文件。 - 创建
WritableSheet对象:在WritableWorkbook中创建一个或多个工作表。 - 创建
WritableFont和WritableCellFormat对象:用于设置单元格内容的字体、样式(如加粗、颜色、对齐方式等)。 - 创建
Label对象:用于表示 Excel 中的文本单元格。 - 将
Label对象添加到WritableSheet中:使用addCell()方法,并指定行和列的索引。 - 写入数据并关闭资源:
- 调用
WritableWorkbook的write()方法,将所有操作真正写入到文件中。 - 调用
close()方法,关闭WritableWorkbook对象,释放资源。
- 调用
完整代码示例:导出一个简单的 Excel 表格
下面是一个完整的、可运行的 Java 示例,它将创建一个名为 student_report.xls 的 Excel 文件,并填充一些学生数据。

import jxl.Workbook;
import jxl.write.*;
import jxl.write.Number;
import java.io.File;
import java.io.IOException;
public class JxlExportExample {
public static void main(String[] args) {
// 1. 定义要导出的文件路径
String filePath = "C:\\temp\\student_report.xls"; // 请确保此目录存在或有权限创建
try {
// 2. 创建一个可写的 Workbook 对象,并将其指向目标文件
// 创建方式会覆盖已存在的同名文件
WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File(filePath));
// 3. 创建一个名为 "学生成绩单" 的工作表
// 参数0表示这是第一个工作表
WritableSheet writableSheet = writableWorkbook.createSheet("学生成绩单", 0);
// 4. 设置单元格样式(字体、加粗、对齐方式)
// 创建字体:Arial, 大小10, 加粗
WritableFont font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
// 创建单元格格式
WritableCellFormat headerFormat = new WritableCellFormat(font);
// 设置背景色(可选)
// headerFormat.setBackground(Colour.LIGHT_BLUE);
// 设置垂直和水平居中
headerFormat.setAlignment(Alignment.CENTRE);
headerFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
// 5. 创建表头数据并添加到工作表
// Label 对象用于文本,构造函数参数为(列索引, 行索引, 内容)
writableSheet.addCell(new Label(0, 0, "学号", headerFormat));
writableSheet.addCell(new Label(1, 0, "姓名", headerFormat));
writableSheet.addCell(new Label(2, 0, "语文", headerFormat));
writableSheet.addCell(new Label(3, 0, "数学", headerFormat));
writableSheet.addCell(new Label(4, 0, "总分", headerFormat));
// 6. 创建并添加普通行数据
// 第一行学生数据
writableSheet.addCell(new Label(0, 1, "1001"));
writableSheet.addCell(new Label(1, 1, "张三"));
writableSheet.addCell(new Number(2, 1, 95.5)); // Number 对象用于数字
writableSheet.addCell(new Number(3, 1, 88.0));
writableSheet.addCell(new Number(4, 1, 183.5));
// 第二行学生数据
writableSheet.addCell(new Label(0, 2, "1002"));
writableSheet.addCell(new Label(1, 2, "李四"));
writableSheet.addCell(new Number(2, 2, 76.0));
writableSheet.addCell(new Number(3, 2, 92.5));
writableSheet.addCell(new Number(4, 2, 168.5));
// 第三行学生数据
writableSheet.addCell(new Label(0, 3, "1003"));
writableSheet.addCell(new Label(1, 3, "王五"));
writableSheet.addCell(new Number(2, 3, 85.0));
writableSheet.addCell(new Number(3, 3, 79.5));
writableSheet.addCell(new Number(4, 3, 164.5));
// 7. 自动调整列宽(jxl 本身不直接支持,这是一个简单估算的方法)
// 注意:这是一个简化的方法,jxl 没有像 POI 那样完美的自动列宽功能
for (int i = 0; i < 5; i++) {
writableSheet.setColumnView(i, 15); // 设置列宽为15个字符宽度
}
// 8. 写入数据并关闭工作簿
// 这一步至关重要,将内存中的操作写入到物理文件
writableWorkbook.write();
// 关闭工作簿,释放资源
writableWorkbook.close();
System.out.println("Excel 文件导出成功!路径为:" + filePath);
} catch (IOException e) {
System.err.println("文件操作异常,请检查路径或权限!");
e.printStackTrace();
} catch (WriteException e) {
System.err.println("Excel 写入异常,请检查数据格式或样式!");
e.printStackTrace();
}
}
}
代码解释:
Workbook.createWorkbook(new File(filePath)): 创建一个可写的Workbook,目标文件是filePath,如果文件已存在,它会被覆盖。writableWorkbook.createSheet("学生成绩单", 0): 创建一个名为 "学生成绩单" 的工作表,0是它在工作簿中的索引(从0开始)。WritableFont: 用于定义字体,如字体名称、大小、是否加粗、是否斜体等。WritableCellFormat: 用于定义单元格的格式,如对齐方式、边框、背景色等,它通常与一个WritableFont关联。Label: 用于向 Excel 中写入字符串,构造函数参数是(column, row, content)。Number: 用于向 Excel 中写入数字(整数或浮点数),构造函数参数是(column, row, numberValue)。writableSheet.setColumnView(i, 15): 设置第i列的宽度为15,这是jxl中手动调整列宽的方式。writableWorkbook.write(): 将所有在内存中的操作真正写入到文件中,没有这一步,文件会是空的。writableWorkbook.close(): 关闭Workbook对象,释放所有占用的资源,这是一个必须步骤,否则可能导致文件损坏或资源泄露。
JXL 的主要优缺点
优点:
- 简单易用:API 设计直观,学习曲线平缓,对于简单的读写任务非常容易上手。
- 轻量级:库文件本身不大,不会给你的项目带来太大的负担。
- 性能较好:对于大数据量的简单导出,性能表现不错。
- 支持
.xls格式:完美兼容旧版的 Excel 97-2003 格式。
缺点:
- 不支持
.xlsx格式:这是jxl最致命的缺点。.xlsx是目前 Excel 的标准格式,而jxl无法处理它。 - 功能有限:不支持复杂的功能,如公式、图表、条件格式、数据透视表等。
- 已停止维护:
jxl项目已经很久没有更新了,对于新版本 Excel 的一些特性不支持,也可能存在未知的 bug。 - 自动列宽功能弱:不像 Apache POI 那样可以基于内容自动计算并设置精确的列宽。
总结与建议
| 特性 | JXL | Apache POI |
|---|---|---|
| 文件格式 | 仅支持 .xls |
支持 .xls 和 .xlsx |
| 易用性 | 非常简单 | 相对复杂,功能强大 |
| 功能丰富度 | 基础功能 | 非常全面,支持几乎所有 Excel 功能 |
| 维护状态 | 已停止 | 非常活跃,持续更新 |
| 性能 | 良好 | 对于大数据量,需要优化(如 SXSSF) |
- 如果你的项目只需要导出简单的
.xls文件,且追求开发速度和代码简洁,jxl是一个不错的选择。 - 如果你的项目需要支持
.xlsx格式,或者需要使用 Excel 的高级功能(如图表、公式等),或者项目对长期维护性有要求,那么强烈推荐使用 Apache POI,它是目前 Java 操作 Excel 的事实标准。
希望这份详细的教程能帮助你掌握 jxl 的 Excel 导出功能!

