私は、再帰式を含む多くの計算を含むEXCELスプレッドシートを持っています(これらを問題なく計算するExcelでは完全に問題ありません)。
私はバージョン 3.8 の Apache Poi API を使用して、既存のスプレッドシートを開き、計算用に更新された値を追加し、スプレッドシートを保存して、結果をプログラムに読み込みます。
スプレッドシートのメモリ内 poi バージョンが再帰計算を実行しないことを除いて、これはすべて機能します。
ワークブック全体、各シート、次に各数式セルを計算するために POI コードを呼び出していますが、セルの数式は計算されません。
保存したスプレッドシートを開いて計算すると、式は値を正確に計算します。可能であれば、ユーザーが保存したスプレッドシートを手動で開かないようにする必要があります。
この問題についての洞察をいただければ幸いです。
これが私が試したコードです。すべてエラーなしで実行されますが、式は計算されません。
数式は既にスプレッドシートにあり、正常に機能しているため、数式を強制的に再計算しようとしています。
私はこれらすべてのバリエーションを試しました。コードは実行され実行されますが、式は計算されません
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
/*
//wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
System.out.println(wb.getSheet("Rate Report").getRow(16).getCell(0).getStringCellValue());
System.out.println(wb.getSheet("Rate Report").getRow(16).getCell(1).getNumericCellValue());
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
//String wbsheets[] = {"Original","Main_DB","Parameters","Translator","Workers Comp.","Rate Report","Notes Fields"};
String wbsheets[] = {"Notes Fields","Translator","Parameters","Rate Report"};
for(String sheetName : wbsheets) {
Sheet sheet = wb.getSheet(sheetName);
System.out.println("processing sheet: " + sheet.getSheetName());
for(Row r : sheet) {
for(Cell c : r) {
if(c.getCellType() == Cell.CELL_TYPE_FORMULA) {
System.out.println("Recalcing: "+r.getRowNum()+c.getColumnIndex() + "in "+ sheet.getSheetName());
evaluator.evaluateFormulaCell(c);
}
}
}
}
XSSFFormulaEvaluator.evaluateAllFormulaCells((XSSFWorkbook) wb);