2016-09-09 42 views
2

Apache POIで数式を評価する際に問題が発生します。ここでApache POIの数式が評価されない

complete.getCreationHelper().createFormulaEvaluator().evaluateAll(); 
complete.write(fileOut); 

(彼らは数字だ証明)私はセルへの書き込みを呼び出すコードが使用されています:

ここで私が執筆する前に式を評価するために呼び出すコードですFYI

try{ 
    cell.setCellValue((Double)grid[i][j]); 
} 
catch(Exception e){ 
    cell.setCellValue((String)grid[i][j]); 
} 

gridは、タイプdoubleStringのエントリのみを含む2D Objectの配列です。

「= I13/G13:

"= STDEV.P(L1 C1)" - "H13 = G13"

を:

ここで私は評価しようとしている数式です"

最終的なブックをExcelで開いたときに、数式が評価されない理由は何ですか?また、評価されていないフィールドをクリックしてEnterを押すと、Excelが数式を認識して評価します。バルクではこれは実用的ではありませんが、使用されている細胞が正しいタイプであることが実証されていると思います。これは、Stringタイプの式に関連していますか?

EDIT:

OKをので、あなたが明示的に使用すると、数式セルを持っていることを伝えることになっているように見えます。

try{ 
    cell.setCellValue((Double)grid[i][j]); 
} 
catch(Exception e){ 
    String val = (String) grid[i][j]; 
    if (val != null && val.startsWith("=")){ 
     val = val.replaceAll("=", ""); 
     cell.setCellType(XSSFCell.CELL_TYPE_FORMULA); 
     cell.setCellFormula(val); 
    } 
    else{ 
     cell.setCellValue(val); 
    } 
} 

は、残念ながら、あなたが数式を通過した後、(ダムである)保存する前に再評価することを強制する(ダムである)等号削除する必要があります。ここではそれを行うに私の修正コードです。

をによって引き起こさ: org.apache.poi.ss.formula.eval.NotImplementedFunctionException: STDEV.P

I言って、しかし、それは訴え式を再評価するためにそれを取得しようとした後、これは、Excelが標準偏差の計算を実装したがPOIがまだ追いついていないことを想像していますか?あなたはおそらくちょうど保存する前にこれを呼び出したい

HSSFFormulaEvaluator.evaluateAllFormulaCells(hssfWorkbook) 

XLS

を使用している場合は、

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); 

のか:

+2

フォーミュラセルを設定するコードが表示されません。間違いの場合に備えて投稿することはできますか? – Gagravarr

+0

数式セルを設定しますか?私はこれが私が行方不明であるかもしれないように感じる。私は明示的に "文字列値を持っていて、等号記号で始まる式セルです"と明示する必要がありますか?それが事実なら、それはかなりばかげているので、私は必要な区別を見ることができます。 –

+0

数式セルは文字列セルとは別の方法でファイルに保存されるため、明示的に指定する必要があります – Gagravarr

答えて

2

これを試してみてください。

関連する問題