所以我有一些問題獲得Apache POI來評估公式。Apache POI公式不評估
下面的代碼我打電話寫之前評估公式:
complete.getCreationHelper().createFormulaEvaluator().evaluateAll();
complete.write(fileOut);
這裏的正在使用的代碼,我打電話寫信給細胞(證明他們是數字):
try{
cell.setCellValue((Double)grid[i][j]);
}
catch(Exception e){
cell.setCellValue((String)grid[i][j]);
}
FYI :grid
是2D Object
陣列,僅包含double
和String
類型的條目。
這裏是我試圖評估公式:
「= G13 - H13」
「= STDEV.P(C1:L1)」
「= I13/G13 「
任何想法爲什麼當我在Excel中打開我的最終工作簿時,公式沒有被評估?另外,當我點擊未評估的字段並點擊輸入時,Excel將識別公式並對其進行評估。散裝這是不實際的,但我相信它表明,正在使用的細胞是正確的類型。這可能與String
類型的公式有關嗎?
編輯:
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
我試圖讓它重新評估公式是抱怨,但是,說後想象這意味着Excel已經實施了標準偏差計算,但POI還沒有趕上呢?
我看不到任何代碼,你設置公式單元格 - 你可以發佈,以防萬一你的錯誤? – Gagravarr
設置公式單元格?我覺得這可能是我錯過的。我是否需要明確地告訴它「如果你有一個字符串值並且以等號開始,你是一個公式單元格」?因爲這是非常愚蠢的,如果是這樣的話,但我可以看到區別是必要的。 –
公式單元格以與字符串單元格不同的方式存儲在文件中,因此您需要明確 – Gagravarr