簡體   English   中英

如何使用 Apache POI 在單元格中設置公式?

[英]How to set formulas in cells using Apache POI?

我目前正在使用Apache POI for Java 在單元格中設置公式。

但是在我運行程序並打開我創建和處理的 Excel 文件后,帶有公式的單元格將公式作為字符串包含,而不是公式應該返回的值。

HSSFCell對象具有方法.setCellType.setCellFormula ,您需要像這樣調用它們:

// "cell" object previously created or looked up
String strFormula= "SUM(A1:A10)";
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(strFormula);

不推薦使用細胞常數,並將從 4.0 版中刪除,而不是從細胞使用中刪除

細胞類型公式

String formula= "SUM(B4:B20)"; cell.setCellType(CellType.FORMULA); cell.setCellFormula(formula);

更新

setCellType() :基於@fenix 評論。 此方法已棄用,將在 POI 5.0 中刪除。 使用顯式 setCellFormula(String)、setCellValue(...) 或 setBlank() 來獲得所需的結果。

String formula= "SUM(B4:B20)";
cell.setCellFormula(formula);

下面的代碼對我來說很好用,希望這對某人有用。

cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(C70:C76)");

Apache POI 不支持用戶自定義函數。

文檔

請注意,不支持用戶定義的函數,並且不太可能在短期內完成……至少,在 Java 中有 VB 實現之前不會!

您可以使用它來評估工作簿中的公式:

        // Evaluate all formulas in the sheet, to update their value
    FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
    formulaEvaluator.evaluateAll();

我遇到了類似的問題, "SUM(B4:B20)"不能直接為我工作,因為工作表是動態生成的。 問題在於單元格引用。

https://stackoverflow.com/a/2339262/2437655https://stackoverflow.com/a/33098060/2437655的基礎上,我能夠生成實際的公式。 例如

 val totalProductQtyPerUserCell = userDetailsRow.createCell(products.size + 1)
 totalProductQtyPerUserCell.cellType = HSSFCell.CELL_TYPE_FORMULA
 totalProductQtyPerUserCell.cellFormula = "SUM(${CellReference.convertNumToColString(1)}${totalProductQtyPerUserCell.row.rowNum + 1}:${CellReference.convertNumToColString(products.size)}${totalProductQtyPerUserCell.row.rowNum + 1})"

希望有所幫助。

這是一種建議的方法:

Workbook workbook1 = new SXSSFWorkbook(-1);
Sheet newSheet = workbook1.createSheet("Valuations");
Row newRow = newSheet.createRow(i-1);
newRow.createCell(L++).setCellFormula("AVERAGE(" + "E" + i + ":" + "G" + i + ")");

其中 E 和 G 是 A1,B1,C1....E1...G1 之類的列
我在上面的列中代表一個數字。

L++ 只是一個增量計數器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM