我想将简单的VLookup公式放入使用Java和Apache POI的“.xlsx”文件中。
此公式具有外部参照,并不适合我。Java POI XSSF VLookup公式
所以,给你更多的细节我使用POI和POI-OOXML版本3.13和Excel 2007中
我把该公式单元格这种方式(其中cell是小区):
cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("StringContainingFormula");
然后评估公式,我尝试了三种不同的方式,但没有运气。 (wb是XSSFWorkbook)。
FormulaEvaluator mainWorkbookEvaluator = wb.getCreationHelper().createFormulaEvaluator();
Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>();
workbooks.put("SpreadsheetName.xlsx", mainWorkbookEvaluator);
mainWorkbookEvaluator.setupReferencedWorkbooks(workbooks);
mainWorkbookEvaluator.evaluateAll();
XSSFEvaluationWorkbook.create(wb);
Workbook nwb = wb;
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
for (Sheet sheet : nwb) {
for (Row r : sheet) {
for (Cell c : r) {
if (c.getCellType() == Cell.CELL_TYPE_FORMULA) {
try {
//evaluator.evaluateFormulaCell(c);
evaluator.evaluate(c);
} catch (Exception e) {
System.out.println("Error occured in 'EvaluateFormulas' : " + e);
}
}
}
}
}
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
的问题是,将其写入到Excel文件,然后在评估它引发错误:
java.lang.IllegalArgumentException: Invalid sheetIndex: -1
现在,如果我打开Excel文件,它给了我警告:
Automatic update of links has been disabled
如果我启用内容,公式显示的结果正确,如果我没有做任何事情比公式导致#N/A
。
现在,如果我选择其中的公式单元格,然后单击公式栏并按回车比公式显示结果。
更新:
所以,我通过进入Excel选项禁用警告消息,并开始给我在细胞内的公式。
但是,当我尝试使用
if (cell.getCachedFormulaResultType == Cell.CELL_TYPE_STRING) {
System.out.println("Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
}
从它那里得到的结果值它从来没有给我的getCachedFormulaResultType
为CELL_TYPE_STRING
,它总是返回CELL_TYPE_NUMERIC
。它应该返回字符串值。我正在解释URL和其他值(单词“|” - “猫|鸟”)。
我感谢任何帮助/建议。
可能是最好的检查[公式评估(https://开头的POI。 apache.org/spreadsheet/eval.html)文件仔细。也许像'wb.setForceFormulaRecalculation(true);'会帮助你? –
此外,文档的说'createFormulaEvaluator'您参考的工作表。例如,'workbooks.put(“input.xls”,WorkbookFactory.create(“c:\ temp \ input22.xls”)。getCreationHelper()。createFormulaEvaluator());' –
@Nicholas,非常感谢您的提示,但我找不到类似于'wb.setForceFormulaRecalculation(true);'和我已经尝试'createFormulaEvaluator'的引用,但没有运气。 – ManishChristian