Java Apache POI-编辑和保存后需要修复工作簿

时间:2018-08-01 21:23:06

标签: java excel apache-poi

我的大部分Java程序都处理Excel和Apache POI。但是,一种方法似乎破坏了文件,迫使用户在打开文件之前对其进行修复。尝试打开时的Excel消息是:“我们在[工作簿]中发现了一些内容问题。您是否要我们尝试尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。 / p>

实际上,我用另一种方法编辑此确切的工作簿,没有任何问题。据我所知,在这个看似错误的代码中,我没有做过以前没有做过的事情。

public static void refreshExcel() {
try {
    workbook = new XSSFWorkbook(new BufferedInputStream(new FileInputStream(file)));
    sheet = workbook.getSheet("DISTRIBUTION");
} catch (Exception ex) {
    MasterLog.appendError(ex);
}//try-catch                                                                                                               
sheet.disableLocking();

//you can ignore the next 3 lines, they essentially find the rows that need to be updated
ArrayList<String> list = Log.modelLackingSCs();
for (String sc : list) {
    int desiredIndex = findFirstIndex(sc);

    XSSFRow row = sheet.getRow(desiredIndex);
    try {
        while (row.getCell(10).getNumericCellValue() == Integer.parseInt(sc)) {
            row.createCell(8).setCellValue(OrderLog.findShipDate(OrderLog.getWB(sc)));
            row = sheet.getRow(++desiredIndex);
        }//while                                                                                                           
    } catch (IllegalStateException ise) {
        MasterLog.appendEntry("ise");
    } catch (Exception ex) {
        MasterLog.appendError(ex);
    }//try-catch                                                                                                           
}//for                                                                                                                     
sheet.enableLocking();

try {
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
    workbook.write(bos);
} catch (Exception ex) {
    MasterLog.appendError(ex);
}//try-catch                                                                                                               
}//refreshExcel()

0 个答案:

没有答案