2

私は、再帰式を含む多くの計算を含む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);
4

0 に答える 0