Java 中处理 Excel:库概览与代码示例
Java 是企业级开发中最流行的语言之一,经常需要与 Microsoft Excel 电子表格(.xls 和 .xlsx 格式)进行交互。无论是导出报告、从 CRM 导入数据,还是自动化会计报告,都离不开一个可靠的工具来处理 Excel。在本文中,我们将介绍 Java 的主要库、它们的特性、优缺点,并提供实用的代码示例。
Java 中处理 Excel 的流行库
目前有几种成熟的解决方案。具体库的选择取决于 Excel 版本、数据量和所需功能。
- Apache POI — 事实上的标准。支持两种格式(
.xls和.xlsx),允许读取、写入、格式化单元格,处理公式、图表和宏。虽然较重,但功能最强大。 - JExcelApi (jxl) — 更轻量的替代方案,但仅支持旧版
.xls格式。适用于不需要.xlsx支持的简单任务。 - EasyExcel (Alibaba) — 基于 POI 的轻量级版本,针对大文件和流式处理进行了优化。非常适合导入/导出数百万行数据。
- OpenCSV — 并非直接用于 Excel,而是用于处理 CSV(Excel 可打开)。非常适合无需格式化的简单表格数据交换。
示例 1:使用 Apache POI 读取 Excel 文件
考虑一个基本场景:打开 data.xlsx 文件并将第一页的内容输出到控制台。
import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;
public class ReadExcelExample { public static void main(String[] args) { String filePath = "data.xlsx";
try (FileInputStream fis = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0); // 第一页
for (Row row : sheet) { for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "\\t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "\\t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\\t"); break; default: System.out.print("?\\t"); } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } }}示例 2:格式化写入 Excel 数据
创建一个新的 report.xlsx 文件,包含标题和数据,并将标题设置为粗体。
import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;
public class WriteExcelExample { public static void main(String[] args) { try (Workbook workbook = new XSSFWorkbook()) { Sheet sheet = workbook.createSheet("报告");
// 标题样式 CellStyle headerStyle = workbook.createCellStyle(); Font headerFont = workbook.createFont(); headerFont.setBold(true); headerFont.setFontHeight