我试图使用Java和Apache POI将简单的VLookup公式放入我的“.xlsx”文件中。
该公式有外部引用,但对我不起作用。
因此,为了给您提供更多细节,我使用了poi和POI-OOXML3.13版以及Excel2007。
我以这种方式将公式放入单元格(其中单元格是单元格):
cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("StringContainingFormula");
FormulaEvaluator mainWorkbookEvaluator = wb.getCreationHelper().createFormulaEvaluator();
Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>();
workbooks.put("SpreadsheetName.xlsx", mainWorkbookEvaluator);
mainWorkbookEvaluator.setupReferencedWorkbooks(workbooks);
mainWorkbookEvaluator.evaluateAll();
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);
}
}
}
}
}
3
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
问题是,它写入Excel文件,然后在计算时抛出错误:
if (cell.getCachedFormulaResultType == Cell.CELL_TYPE_STRING) {
System.out.println("Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
}
它从来没有给我getCachedFormulareSultType
作为cell_type_string
,它总是返回cell_type_numeric
。它应该返回字符串值。我将删除URL和其他值(由“”-“Catdogbird”分隔的单词)。
我很感激任何帮助/建议。
嗯,好像起作用了。你必须温和地对待excel;如果先打开外部工作簿,然后打开主工作簿,会更开心。如果你没有,它会给出一个关于不安全链接的信息,但除此之外,一切似乎都很好。计算器只作用于单个单元格,因此如果要重新计算整个电子表格,则必须进行循环。此外,外部引用必须已经通过excel链接,POI
尚未实现该功能。以下是我在GitHub中的内容:
// Open workbooks
Path pathBook1 = Paths.get("c:/users/karl/scsb/Vlookup/Book1.xlsx");
InputStream is = Files.newInputStream(pathBook1);
XSSFWorkbook book1 = new XSSFWorkbook(is);
// Add Linked Cell
// The workbook must already have been linked to Book2.xlsx by Excel
// The linkExternalWorkbook has not yet been implemented: SEE BUG #57184
Cell cell = book1.getSheetAt(0).createRow(2).createCell(0);
cell.setCellFormula("A2+[Book2.xlsx]Sheet1!A1");
// Create evaluator after the new cell has been added.
FormulaEvaluator mainEvaluator = book1.getCreationHelper().createFormulaEvaluator();
XSSFWorkbook book2 = new XSSFWorkbook("c:/users/karl/scsb/Vlookup/Book2.xlsx");
Map<String, FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>();
workbooks.put("Book1.xlsx", mainEvaluator);
workbooks.put("Book2.xlsx", book2.getCreationHelper().createFormulaEvaluator());
mainEvaluator.setupReferencedWorkbooks(workbooks);
// mainEvaluator.evaluateAll(); // doesn't work.
// XSSFFormulaEvaluator.evaluateAllFormulaCells(book1); // doesn't work.
mainEvaluator.evaluateFormulaCell(cell);
System.out.println(cell.getNumericCellValue());
book2.close();
// Close and write workbook 1
is.close();
OutputStream os = Files.newOutputStream(pathBook1);
book1.write(os);
os.close();
book1.close();
本文向大家介绍LR公式相关面试题,主要包含被问及LR公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,然后使用函数g(z)作为假设函数来预测。g(z)可以将连续值映射到0 和1。g(z)为sigmoid function. sigmoid function 的导数如下: 逻辑回归用来分类0/
本文向大家介绍FM公式相关面试题,主要包含被问及FM公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
本文向大家介绍Wod2vec公式相关面试题,主要包含被问及Wod2vec公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: Hierarchical Softmax CBOW Skip-gram Negative Sampling CBOW Skip-gram
本文向大家介绍softmax公式相关面试题,主要包含被问及softmax公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 考虑一个多分类问题,即预测变量y可以取k个离散值中的任何一个.比如一个邮件分类系统将邮件分为私人邮件,工作邮件和垃圾邮件。由于y仍然是一个离散值,只是相对于二分类的逻辑回归多了一些类别。下面将根据多项式分布建模。 考虑将样本共有k类,每一类的概率分别为,由于,所以通常
本章将指导您使用Java编程在单元格上应用不同的公式。 Excel应用程序的基本目的是通过在其上应用公式来维护数值数据。 在公式中,我们传递Excel工作表中值的动态值或位置。 执行此公式时,您将获得所需的结果。 下表列出了Excel中经常使用的一些基本公式。 手术 句法 Adding multiple numbers = SUM(Loc1:Locn) or = SUM(n1,n2,) Count
我已经通过接受了公平和非公平纪律的测试。我写了一个模拟哲学家吃饭的小程序。 每个哲学家都有左右叉子,分别是s。我模拟了1000次思考和进食行为: 在哪里 没什么意思,只是睡了一段时间而已。下面是eat的
本文向大家介绍.欧拉公式相关面试题,主要包含被问及.欧拉公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答:
insertFormula(int $row, int $column, string $formula [, resource $formatHandler]) int $row $excel = new \Vtiful\Kernel\Excel($config); $freeFile = $excel->fileName("free.xlsx") ->header(['name'