使用表达式

时间:2015-05-07 14:41:40

标签: java apache-poi

我有一张excel表,其中包含许多列作为输入。我有另一张包含带表达式的列名的表。

示例 - 表达式表包含

{{CS_RRC_Successful (number)+PS_RRC_Sucessful (number)}*100},

其中CS_RRC_Successful(数字)和PS_RRC_Sucessful(数字)是输入表格中的列。

我应该如何使用poi使用java来评估这些表达式?

2 个答案:

答案 0 :(得分:0)

“cellType”会告诉您它是否为公式。然后,调用getCellFormula()

if(theCell.getCellType()== Cell.CELL_TYPE_FORMULA)
{
   String formulaVal = theCell.getCellFormula();
}

查看API文档,查看Cell上可用的其他公式相关方法。 https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html

答案 1 :(得分:0)

这只是一个示例代码,用于评估单元格的公式 - SUM(A1:B1)+10。您必须将其替换为您正在使用的公式,并将单元格类型设置为数字(或您的Excel公式将返回的任何数据类型)。

见下面的例子:

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); 
//you will need to create the row in case you are making a new file.    
Row row = sheet.getRow(0);
Cell cell2 = row.createCell(2);
//set cell formula
cell2.setCellFormula("SUM(A1:B1)+10");
//evaluate the formula
evaluator.evaluateFormulaCell(cell2);
//set the cell type to numeric
cell2.setCellType(Cell.CELL_TYPE_NUMERIC);   //or CELL_TYPE_FORMULA
System.out.println(cell2.getNumericCellValue());

//write data to excel file
FileOutputStream out = new FileOutputStream(new File("res/Book1.xlsx"));
workbook.write(out);
out.close();
System.out.println("Excel written successfully..");