以下是一种解决方法,使用Apache POI库的XSSF来处理损坏的.xlsx文件:
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ExcelFileRepair {
public static void main(String[] args) {
String filePath = "path/to/your/file.xlsx";
try {
FileInputStream fis = new FileInputStream(new File(filePath));
Workbook workbook = WorkbookFactory.create(fis);
// 修复损坏的文件
if (workbook instanceof XSSFWorkbook) {
XSSFForceFormulaRecalculation recalculation = new XSSFForceFormulaRecalculation((XSSFWorkbook) workbook);
recalculation.forceFormulaRecalculation();
}
// 处理工作表
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
Sheet sheet = workbook.getSheetAt(i);
for (Row row : sheet) {
for (Cell cell : row) {
// 处理单元格数据
CellType cellType = cell.getCellType();
if (cellType == CellType.FORMULA) {
// 重新计算公式
CellValue cellValue = CellEvaluator.evaluateFormula(cell, workbook);
cell.setCellValue(cellValue.getNumberValue());
}
}
}
}
// 保存修复后的文件
workbook.setForceFormulaRecalculation(true);
workbook.write(new File("path/to/save/fixedfile.xlsx"));
workbook.close();
System.out.println("修复成功并保存修复后的文件。");
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
}
}
}
请确保将path/to/your/file.xlsx
替换为要修复的.xlsx文件的实际路径。修复后的文件将保存为path/to/save/fixedfile.xlsx
。
此代码示例使用Apache POI库的XSSFForceFormulaRecalculation
类来强制重新计算.xlsx文件中的公式。然后,通过遍历工作表和单元格,重新计算并修复所有单元格中的公式。最后,修复的文件将保存在指定的路径中。