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

如何重新计算单元格的公式?

尉迟国发
2023-03-14

我的代码设置了很多单元格值。最后,在生成excel文件之前,需要评估每个单元格中的公式。对于大多数床单来说,一切都很顺利。

但是,有一个单元格正在引发异常。该单元格正在计算其后面的一系列单元格和其他工作表中的参考单元格的平均值。我猜当第一个单元格试图计算平均值时,后面的单元格尚未计算。

这是那个单元格上的公式

=IFERROR(AVERAGEIF(D2:AU2,"<>-"),"-")

我怀疑是因为单元格int限制了其他工作表中的引用单元格。例如,D2具有以下公式=Common!E2

所以我决定做的是:

  1. 将调用包装在try-catch块中执行公式
  2. 如果执行一个单元格引发异常,我会保存该单元格的坐标
  3. 然后我执行引发异常的单元格

我注意到同一个单元格不断抛出错误。为了能够退出html" target="_blank">循环,我计算了3次迭代。

生成excel generate时,该单元格具有值。但是,当我选择单元格,然后按enter键时,它会执行并显示正确的值。

我之所以推迟该单元格的执行,是因为在第一次迭代之后,引用其他工作表的单元格已经被评估过了。但是,它仍然无法工作,因为它不断抛出异常。

谢谢你的帮助。

我正在使用npoi和c#。

共有3个答案

严知
2023-03-14

使用NPOI时,Evalds答案是最好的。我正在阅读通过FTP接收并加载到我的项目中的excel文件。因此,只需在加载点评估所有单元。

static void InitializeWorkbook(string path)
    {
        using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
        {
            xssfworkbook = new XSSFWorkbook(file);
            XSSFFormulaEvaluator.EvaluateAllFormulaCells(xssfworkbook);
        }

        handleSheet(xssfworkbook.GetSheetAt(0));
    }
孔和畅
2023-03-14

您是否已检查MSDN:以编程方式运行Excel计算?

屠嘉勋
2023-03-14

在NPOI

if(wb is XSSFWorkbook) {
    XSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
} else {
    HSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
}
 类似资料:
  • 由于内存问题,我们使用ApachePOI的Sax解析器方法来读取大量数据。xlsx excel文件。然而,这种方法在公式单元格中似乎有局限性。它似乎从“缓存的公式值”中读取值。我找不到触发重新计算以更新值的最佳解决方案。有人面临同样的问题吗?谢谢

  • 我正在使用apache POI更改excel表中的单元格。更改值后,与已更改的单元格对应的公式的单元格不会更新。 当我进入excel并单击带有公式的单元格,然后在函数栏中单击时,公式会更新。 A1仍然等于3,直到我点击那个单元格。 刷新工作簿或工作表也不起作用。这是excel或POI的问题吗?有人能想出一个变通办法吗?

  • 我能够使用Apache POI读写单元格值。阅读时,我首先进行评估,这样我就得到了正确的数值。我的用例要求我读取一个工作表,替换工作表中的几个值,然后读取工作表中包含依赖于我刚才替换的单元格的单元格的另一部分。 包含一个公式:。包含,包含。当我计算时,我正确地得到。现在,如果我用POI api将替换为,我希望当我再次阅读时,我会看到。我不...现在计算为。 救命啊!

  • 因此,我使用Apache POI(在最新的稳定版本5.0.0中使用poi-ooxml),并打开一个现有的Excel(XSLX)文件进行编辑(它基本上是一个模板文件,用于填充其他数据)。我添加了多行新数据并再次导出Excel。所有的工作都很好,只要我只添加规则的内容单元格。 现在,我有一列想要添加一个公式单元格,我使用以下代码(对于本例,您可以放心,它通常编译/运行并在末尾生成一个填充的Excel文

  • 我试图从excel文件中读取所有数据,其中也有一些公式单元格,但我不知道哪个单元格是公式单元格。如何读取单元格中的所有值,而不考虑单元格的类型。 我的代码看起来像这样 我得到的公式单元格值为0

  • 问题内容: Gdata提供了一种基于时间戳仅从Google电子表格中获取更改的单元格的方法。如何为Gdata调用创建时间戳? 即“将仅返回发布时间等于或晚于指定时间戳记的条目。” setPublishedMax()https://developers.google.com/gdata/javadoc/com/google/gdata/client/Query#setPublishedMax (co