在Java开发中,操作Excel文件是常见需求,而JXL(Java Excel API)作为一款轻量级的开源库,因其简单易用、无需额外依赖的特点,被广泛应用于Excel文件的读取与写入,本文将详细介绍Java如何导入JXL库,包括环境准备、核心API解析、基本操作实战及常见问题解决,帮助开发者快速上手。

JXL库简介与环境准备
JXL是一个专门用于Java操作Excel文件的库,支持Excel 95-2003格式(.xls),具备读取、写入、修改Excel的基本功能,且无需安装Microsoft Excel环境,其优势在于体积小、API简洁,适合处理简单的Excel数据处理任务,但需要注意的是,JXL不支持新版Excel格式(.xlsx)及复杂样式设置。
下载JXL库文件
首先需要获取JXL的jar包,可通过官方渠道(SourceForge)或Maven中央仓库下载,以Maven为例,最新版本为2.6.12,在pom.xml中添加以下依赖:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
若使用非Maven项目,可从SourceForge下载jxl.jar,手动添加到项目的类路径中:在IDE(如IntelliJ IDEA或Eclipse)中右键项目→Build Path→Add External JARs,选择下载的jxl.jar文件即可。
JXL核心API解析
JXL的核心类围绕Excel的“工作簿-工作表-单元格”层级结构设计,掌握这些类是使用JXL的基础。
Workbook(工作簿)
Workbook代表整个Excel文件,是操作的入口,常用方法包括:
Workbook.getWorkbook(File file):读取已存在的Excel文件,返回Workbook实例;Workbook.createWorkbook(File file, Workbook existingWorkbook):基于现有工作簿创建可写入副本;Workbook.createWorkbook(File file):创建新的空白工作簿。
Sheet(工作表)
Sheet代表Excel中的单个工作表,通过Workbook的getSheet(String name)或getSheet(int index)获取(索引从0开始),常用方法:

getRows():获取工作表的总行数;getColumns():获取工作表的总列数;getCell(int column, int row):获取指定列、行的单元格对象。
Cell(单元格)
Cell代表工作表中的单个单元格,根据数据类型可分为Label(字符串)、Number(数字)、DateCell(日期)等子类,常用方法:
getContents():获取单元格的字符串内容(通用方法);getType():获取单元格类型(如CellType.LABEL、CellType.NUMBER);- 子类专用方法:如
NumberCell的getValue()获取数字值,DateCell的getDate()获取日期值。
WritableWorkbook与WritableSheet(可写工作簿/工作表)
若需修改或创建Excel文件,需使用WritableWorkbook(可写工作簿)和WritableSheet(可写工作表),二者分别对应Workbook和Sheet的可写版本。WritableWorkbook.createWorkbook(File file)创建可写工作簿,WritableSheet.addCell(WritableCell cell)向工作表添加单元格。
JXL基本操作实战
读取Excel文件
以下代码演示读取Excel文件并打印所有内容:
import jxl.*;
import java.io.File;
import java.io.IOException;
public class ReadExcel {
public static void main(String[] args) {
try {
// 1. 获取工作簿对象
Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
// 2. 获取第一个工作表(索引从0开始)
Sheet sheet = workbook.getSheet(0);
// 3. 遍历行和列
for (int i = 0; i < sheet.getRows(); i++) {
for (int j = 0; j < sheet.getColumns(); j++) {
Cell cell = sheet.getCell(j, i);
System.out.print(cell.getContents() + "\t");
}
System.out.println();
}
// 4. 关闭工作簿,释放资源
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
写入Excel文件
写入操作需使用WritableWorkbook和WritableSheet,示例如下:
import jxl.*;
import jxl.write.*;
import java.io.File;
import java.io.IOException;
public class WriteExcel {
public static void main(String[] args) {
try {
// 1. 创建可写工作簿(若文件存在,会覆盖)
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));
// 2. 添加第一个工作表
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 3. 添加字符串单元格(列、行、内容)
Label label = new Label(0, 0, "姓名");
sheet.addCell(label);
Label label2 = new Label(1, 0, "年龄");
sheet.addCell(label2);
// 4. 添加数字单元格
Number number = new Number(0, 1, "张三"); // 注意:JXL的Number单元格需传入数字值,字符串需用Label
sheet.addCell(number);
Number number2 = new Number(1, 1, 25);
sheet.addCell(number2);
// 5. 写入文件并关闭
workbook.write();
workbook.close();
System.out.println("Excel文件写入成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
修改Excel文件
修改需先读取原文件,再创建可写副本,修改后保存为新文件(或覆盖原文件):
import jxl.*;
import jxl.write.*;
import java.io.File;
import java.io.IOException;
public class ModifyExcel {
public static void main(String[] args) {
try {
// 1. 读取原工作簿
Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
// 2. 创建可写副本(基于原工作簿)
WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File("modified.xls"), workbook);
// 3. 获取第一个工作表
WritableSheet sheet = writableWorkbook.getSheet(0);
// 4. 修改第一个单元格内容(假设原为“姓名”,改为“ID”)
Label newLabel = new Label(0, 0, "ID");
sheet.addCell(newLabel);
// 5. 写入并关闭
writableWorkbook.write();
writableWorkbook.close();
workbook.close();
System.out.println("Excel文件修改成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
常见问题与解决方案
中文乱码问题
JXL默认使用系统编码,若Excel文件编码与系统编码不一致(如文件为UTF-8,系统为GBK),可能导致中文乱码,解决方案:在创建Workbook时,通过InputStreamReader指定编码读取文件(需结合FileInputStream),但JXL本身对编码支持有限,建议确保文件编码与系统一致,或使用更高级的库(如POI)。

文件路径问题
若Excel文件路径错误或文件不存在,会抛出IOException,建议使用绝对路径,或通过System.getProperty("user.dir")获取项目根目录拼接路径,确保文件可访问。
不支持.xlsx格式
JXL仅支持.xls格式,若需处理.xlsx文件,需替换为Apache POI库,POI功能更强大,支持新版Excel格式,但API相对复杂,依赖较多。
资源未释放
操作Excel后未调用workbook.close(),可能导致文件被占用,无法修改或删除,务必在finally块中关闭工作簿,确保资源释放。
JXL作为轻量级的Java操作Excel库,通过简单的API即可实现基本的读写功能,适合中小型项目的Excel数据处理需求,本文从环境准备、核心API到实战操作,详细介绍了Java导入JXL的完整流程,并针对常见问题提供了解决方案,开发者可根据实际需求选择是否使用JXL:若仅需处理.xls文件且功能简单,JXL是高效的选择;若需支持.xlsx格式或复杂样式,建议转向Apache POI,掌握JXL的基本使用,将为Java处理Excel文件提供便捷的工具支持。













