当前位置: 首页 > 知识库问答 >
问题:

Java POI XSSF VLookup公式

罗渝
2023-03-14

我试图使用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”分隔的单词)。

我很感激任何帮助/建议。

共有1个答案

茹正初
2023-03-14

嗯,好像起作用了。你必须温和地对待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'