Apache POI(Poor Obfuscation Implementation)是一个开源的Java库,用于处理Microsoft Office格式的文件,如Word文档(.doc, .docx)和Excel工作簿(.xls, .xlsx)。在Spring Boot项目中使用Apache POI可以方便地进行Excel文件的读写操作。下面是一个简单的入门示例,演示如何在Spring Boot项目中使用Apache POI操作Excel文件。
步骤
1. 添加依赖
首先,在你的Spring Boot项目中的 pom.xml
文件中添加Apache POI依赖。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.4</version> <!-- 版本号可以根据需要调整 -->
</dependency>
<!-- 如果需要处理 .xlsx 格式的Excel文件,还需要添加以下依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version> <!-- 版本号可以根据需要调整 -->
</dependency>
2. 创建一个简单的Excel操作服务类
在Spring Boot项目中创建一个服务类,用于读取和写入Excel文件。
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@Service
public class ExcelService {
public void writeExcelFile() throws IOException {
Workbook workbook = new XSSFWorkbook(); // 使用XSSFWorkbook处理 .xlsx 格式的Excel文件
Sheet sheet = workbook.createSheet("Sheet1");
// 创建第一行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Name");
headerRow.createCell(1).setCellValue("Age");
// 创建数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("John Doe");
dataRow.createCell(1).setCellValue(30);
// 将Workbook写入文件
FileOutputStream fileOut = new FileOutputStream("example.xlsx");
workbook.write(fileOut);
fileOut.close();
workbook.close();
}
public void readExcelFile() throws IOException {
FileInputStream fileIn = new FileInputStream(new File("example.xlsx"));
Workbook workbook = new XSSFWorkbook(fileIn);
Sheet sheet = workbook.getSheetAt(0);
// 读取数据
Row row = sheet.getRow(1);
String name = row.getCell(0).getStringCellValue();
int age = (int) row.getCell(1).getNumericCellValue();
System.out.println("Name: " + name + ", Age: " + age);
workbook.close();
fileIn.close();
}
}
3. 在Controller中调用Excel服务
创建一个Controller类,用于测试Excel服务。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
public class ExcelController {
@Autowired
private ExcelService excelService;
@GetMapping("/writeExcel")
public String writeExcel() throws IOException {
excelService.writeExcelFile();
return "Excel file written successfully!";
}
@GetMapping("/readExcel")
public String readExcel() throws IOException {
excelService.readExcelFile();
return "Excel file read successfully!";
}
}
4. 运行和测试
启动Spring Boot应用程序,并访问 /writeExcel
和 /readExcel
接口,分别测试写入和读取Excel文件的功能。
注意事项
- 确保添加了适当的Apache POI依赖,包括
poi
和poi-ooxml
(如果需要处理 .xlsx 文件)。 - 在操作Excel文件时,记得处理可能抛出的
IOException
异常。 - Apache POI支持多种操作,如合并单元格、设置样式、创建多个Sheet等,可以根据具体需求进一步扩展。
当使用Apache POI处理Excel文件时,还可以考虑以下一些额外的使用场景和功能:
处理大量数据: 如果你需要处理大量数据或者大型的Excel文件,可以考虑使用流式处理(Streaming API)。Apache POI 提供了
SXSSFWorkbook
类来处理大型文件,能够显著减少内存占用。SXSSFWorkbook wb = new SXSSFWorkbook(); // 使用 wb 处理大数据量的Excel文件 wb.dispose(); // 释放临时文件并关闭资源
样式和格式化: Apache POI 允许设置单元格的样式、字体、对齐方式等,以及设置单元格的格式(如日期、货币等)。
CellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER);
公式计算: 如果Excel中包含公式,可以使用Apache POI计算公式的值。
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); Cell cell = row.createCell(2); cell.setCellFormula("A1 + B1"); evaluator.evaluateFormulaCell(cell);
读取特定格式: 通过POI可以读取Excel文件中的特定部分,例如只读取特定Sheet或者特定范围的单元格。
Sheet sheet = workbook.getSheet("Sheet1"); Row row = sheet.getRow(0); Cell cell = row.getCell(0);
图片和图表: 可以将图片插入到Excel中,或者创建图表。
Drawing drawing = sheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 1, 5, 5); Picture pic = drawing.createPicture(anchor, pictureIdx);
合并和拆分单元格: 可以合并多个单元格或拆分已合并的单元格。
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并第一行的前三列 sheet.removeMergedRegion(0); // 拆分第一个合并区域
事件驱动模型: 如果需要更高级的控制和处理,可以考虑使用事件驱动模型(Event API)来处理大型Excel文件,避免加载整个文件到内存中。
OPCPackage pkg = OPCPackage.open(file); XSSFReader reader = new XSSFReader(pkg);
总之,Apache POI提供了丰富的API和功能,可以满足大多数Excel文件操作的需求,不论是简单的数据读写还是复杂的格式处理和公式计算。通过结合这些功能,可以实现更多定制化和复杂的Excel处理任务。