如何重新计算细胞的公式?

时间:2014-06-06 18:49:09

标签: c# excel npoi

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

但是,有一个单元格抛出异常。该单元格正在计算其后的一系列单元格的平均值,并参考其他工作表中的单元格。我想当第一个细胞试图计算平均值时,之后的细胞还没有被评估。

这是该单元格的公式

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

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

所以我决定做的是:

  1. 包裹调用以在try-catch块中执行公式。
  2. 如果执行单元格抛出异常,我会保存该单元格的坐标。
  3. 然后我执行抛出异常的单元格
  4. 我注意到同一个细胞一直在抛出错误。只是为了能够退出循环,我计算到3次迭代。

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

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

    感谢您的帮助。

    更新

    我使用的是npoi和c#。

3 个答案:

答案 0 :(得分:6)

在NPOI中

if(wb is XSSFWorkbook) {
    XSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
} else {
    HSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
}

答案 1 :(得分:1)

使用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));
    }

答案 2 :(得分:0)

您检查过MSDN:以编程方式运行Excel计算吗?