Man*_*ian 8 java apache-poi xssf
我试图使用Java和Apache POI将简单的VLookup公式放在我的".xlsx"文件中.
这个公式有外部参考,这对我不起作用.
所以为了给你更多的细节,我正在使用poi和poi-ooxml版本3.13和excel 2007.
我将这个公式放入单元格(其中cell是一个Cell):
cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("StringContainingFormula");
Run Code Online (Sandbox Code Playgroud)
然后评估公式,我尝试了三种不同的方法,但没有运气.(wb是XSSFWorkbook).
1
FormulaEvaluator mainWorkbookEvaluator = wb.getCreationHelper().createFormulaEvaluator();
Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>();
workbooks.put("SpreadsheetName.xlsx", mainWorkbookEvaluator);
mainWorkbookEvaluator.setupReferencedWorkbooks(workbooks);
mainWorkbookEvaluator.evaluateAll();
Run Code Online (Sandbox Code Playgroud)
2
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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
3
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
Run Code Online (Sandbox Code Playgroud)
问题是,它写入Excel文件,然后在评估它时抛出错误:
java.lang.IllegalArgumentException:无效的sheetIndex:-1
现在,如果我打开Excel文件,它会给我警告:
已禁用链接的自动更新
如果我启用内容,公式会正确显示结果,如果我没有做任何事情而不是公式导致#N/A.
现在,如果我选择带有公式的单元格并单击公式栏并按Enter键,则显示结果.
更新:
因此,我通过进入Excel选项禁用了警告消息,它开始在单元格内给出公式.
但是,当我试图从中获取结果值时
if (cell.getCachedFormulaResultType == Cell.CELL_TYPE_STRING) {
System.out.println("Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
}
Run Code Online (Sandbox Code Playgroud)
它永远不会给我,getCachedFormulaResultType因为CELL_TYPE_STRING它总是回归CELL_TYPE_NUMERIC.它应该返回字符串值.我正在表达URL和其他一些值(由" | " - "cat | dog | bird" 分隔的单词).
我感谢任何帮助/建议.
因此,由于我没有任何其他选择,我必须将引用的数据复制到主工作簿(我知道这不是一个好主意,以防数据很大)才能使事情正常进行。
所以我所做的是:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
| 归档时间: |
|
| 查看次数: |
5302 次 |
| 最近记录: |