C# 如何重新计算单元格';s公式?

C# 如何重新计算单元格';s公式?,c#,excel,npoi,C#,Excel,Npoi,我的代码设置了很多单元格值。最后,在生成excel文件之前,需要计算每个单元格中的公式。对于大多数床单来说,一切都进展顺利 但是,有一个单元格正在引发异常。该单元格正在计算其后面的一系列单元格和其他工作表中的参考单元格的平均值。我猜当第一个单元格试图计算平均值时,后面的单元格尚未计算 这是那个单元格上的公式 =IFERROR(AVERAGEIF(D2:AU2,"<>-"),"-") =IFERROR(平均值IF(D2:AU2,“-”,“-”) 我怀疑这是因为int单元格的范围引用

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

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

这是那个单元格上的公式

=IFERROR(AVERAGEIF(D2:AU2,"<>-"),"-")
=IFERROR(平均值IF(D2:AU2,“-”,“-”)
我怀疑这是因为int单元格的范围引用了其他表格中的单元格<例如,code>D2,具有以下公式
=Common!E2

所以我决定做的是:

  • try catch
    块中包装调用以执行公式
  • 如果执行一个单元格引发异常,我会保存该单元格的坐标
  • 然后我执行抛出异常的单元格
  • 我注意到同一个单元格不断抛出错误。为了能够退出循环,我计算了3次迭代

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

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

    谢谢你的帮助

    更新 我正在使用npoi和c#。

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

    在npoi中

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

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

    也许<代码>应用程序。打开工作簿时计算。或者在保存之前生成。@xQbert我不知道application.Calculate是否是npoi的一部分。我现在正在检查。特别是,如果您只想重新计算单元格,
    工作簿。GetCreationHelper().CreateFormulaEvaluator().EvaluateFormulaCell(单元格)
    可能是更好的选择