当前位置: 技术文章>> 如何在 Java 中读取和写入 Excel 文件?

文章标题:如何在 Java 中读取和写入 Excel 文件?
  • 文章分类: 后端
  • 3087 阅读
在Java中读取和写入Excel文件是一项常见的任务,特别是在处理报表、数据分析或自动化办公任务时。Apache POI是Java处理Microsoft Office文档的一个强大库,特别是它对于Excel文件的处理非常出色。这里,我将详细介绍如何使用Apache POI库在Java中读取和写入Excel文件(以.xls和.xlsx格式为例),同时确保内容既专业又易于理解,避免任何可能暴露文章由AI生成的痕迹。 ### 一、准备工作 首先,你需要在你的Java项目中引入Apache POI库。如果你使用Maven作为构建工具,可以在你的`pom.xml`文件中添加以下依赖项: ```xml org.apache.poi poi 5.2.3 org.apache.poi poi-ooxml 5.2.3 ``` 请注意,版本号(此处为5.2.3)可能会随时间更新,请访问Apache POI官网获取最新版本。 ### 二、读取Excel文件 #### 读取.xls文件(Excel 2003及以前版本) 要读取`.xls`格式的文件,你可以使用`HSSFWorkbook`类。以下是一个基本的示例,展示如何读取工作簿中的第一个工作表及其内容: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ReadXlsExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream(new File("example.xls")); Workbook workbook = new HSSFWorkbook(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; // 其他类型处理... } } System.out.println(); // 换行 } } catch (IOException e) { e.printStackTrace(); } } } ``` #### 读取.xlsx文件(Excel 2007及以后版本) 对于`.xlsx`文件,使用`XSSFWorkbook`类。处理逻辑与`.xls`文件相似,只是工作簿的创建方式略有不同: ```java import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 其他导入与之前相同 public class ReadXlsxExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream(new File("example.xlsx")); Workbook workbook = new XSSFWorkbook(fis)) { // 后续逻辑与ReadXlsExample相同 } catch (IOException e) { e.printStackTrace(); } } } ``` ### 三、写入Excel文件 #### 写入.xls或.xlsx文件 写入Excel文件的过程与读取类似,但你需要先创建工作簿、工作表、行和单元格,并设置单元格的值。Apache POI支持`.xls`和`.xlsx`格式的写入,主要通过`HSSFWorkbook`和`XSSFWorkbook`类实现。 以下是一个写入`.xlsx`文件的示例,但请注意,对于`.xls`文件的写入,只需将`XSSFWorkbook`替换为`HSSFWorkbook`即可: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public class WriteXlsxExample { public static void main(String[] args) { Workbook workbook = new XSSFWorkbook(); // 创建工作簿 Sheet sheet = workbook.createSheet("Example Sheet"); // 创建工作表 // 创建行(从0开始) Row row = sheet.createRow(0); // 在行中创建单元格(从0开始)并设置值 Cell cell = row.createCell(0); cell.setCellValue("Hello, World!"); // 写入到文件 try (FileOutputStream fos = new FileOutputStream("output.xlsx")) { workbook.write(fos); } catch (IOException e) { e.printStackTrace(); } finally { try { workbook.close(); // 关闭工作簿释放资源 } catch (IOException e) { e.printStackTrace(); } } } } ``` ### 四、高级操作 Apache POI库提供了许多高级功能,比如设置单元格样式、调整列宽、合并单元格、添加公式等。以下是一个简单的示例,展示如何设置单元格样式: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 假设其他导入已存在 public class AdvancedExample { public static void main(String[] args) { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Styled Sheet"); // 创建单元格样式 CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); // 水平居中 style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中 Font font = workbook.createFont(); font.setBold(true); font.setFontHeightInPoints((short) 14); style.setFont(font); // 应用样式到单元格 Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("Styled Cell"); cell.setCellStyle(style); // 写入文件等操作... } } ``` ### 五、性能优化 在处理大型Excel文件时,性能是一个关键问题。`XSSFWorkbook`(针对`.xlsx`)在处理大量数据时可能会消耗大量内存。为了优化性能,Apache POI提供了`SXSSFWorkbook`类,它是一个基于窗口的API,用于处理大数据量的Excel文件,通过限制内存中同时存在的行数来减少内存消耗。 ```java import org.apache.poi.xssf.streaming.SXSSFWorkbook; // 其他逻辑与XSSFWorkbook类似,但使用SXSSFWorkbook ``` ### 六、总结 通过上面的介绍,你应该能够掌握在Java中使用Apache POI库读取和写入Excel文件的基本方法。无论是处理简单的数据导入导出任务,还是复杂的报表生成,Apache POI都提供了强大的支持。此外,通过利用Apache POI的高级功能和性能优化技巧,你可以更加高效地处理Excel文件,满足各种业务需求。 最后,提醒一点,Apache POI库持续更新,为了获取最新的功能和修复,建议定期查看Apache POI的官方文档和更新日志。同时,在开发过程中,也可以参考“码小课”网站上的相关教程和示例代码,以获得更多的帮助和灵感。
推荐文章