C# 公式评估在NPOI 2.1.3.0中不起作用

C# 公式评估在NPOI 2.1.3.0中不起作用,c#,excel,formula,npoi,C#,Excel,Formula,Npoi,我正在代码隐藏中创建Excel工作簿,并将其保存为XLSX和PDF。为此,我使用了一个模板工作簿,该工作簿具有在生成后要计算的格式和公式。当我打开Excel文件时,公式仅在我将ForceFormulaRecalculation设置为true时计算。当我对PDF文件执行相同操作时,我得到了#值结果应该在哪里。我的相关代码: ReportGenerator generator = new ReportGenerator(); List<Activity> activities = Get

我正在代码隐藏中创建Excel工作簿,并将其保存为XLSX和PDF。为此,我使用了一个模板工作簿,该工作簿具有在生成后要计算的格式和公式。当我打开Excel文件时,公式仅在我将
ForceFormulaRecalculation
设置为true时计算。当我对PDF文件执行相同操作时,我得到了
#值结果应该在哪里。我的相关代码:

ReportGenerator generator = new ReportGenerator();
List<Activity> activities = GetActivitiesForItemCollection(items);

generator.CreateWorkbook(templatePath);

generator.Year = int.Parse(year);
generator.Month = int.Parse(month);

activities = generator.SortActivitiesByDateTime(activities);

activities = generator.GenerateBreaksForProject(activities);
bool isExternalReport = false;

if (project == "Intern")
    isExternalReport = true;

generator.GenerateReports(activities, isExternalReport);

if (pdf && !xlsx)
    generator.SaveReportToList(OutputFileType.PDF, generator.AssembleFileName(UserProperties.FullName, project, month, year, OutputFileType.PDF));
else if (xlsx && !pdf)
    generator.SaveReportToList(OutputFileType.XLSX, generator.AssembleFileName(UserProperties.FullName, project, month, year, OutputFileType.XLSX));
else
{                            
    generator.SaveReportToList(OutputFileType.XLSX, generator.AssembleFileName(UserProperties.FullName, project, month, year, OutputFileType.XLSX));
    generator.SaveReportToList(OutputFileType.PDF, generator.AssembleFileName(UserProperties.FullName, project, month, year, OutputFileType.PDF));
}
我也试过这样做:

private void ForceCalculateSheet()
{
      XSSFFormulaEvaluator helper = (XSSFFormulaEvaluator)workbook.GetCreationHelper().CreateFormulaEvaluator();

      for(int i = 0; i<sheet.LastRowNum; i++)
      {
          XSSFRow row = (XSSFRow)sheet.GetRow(i);

          for(int j = 0; j< row.LastCellNum; j++)
          {
               XSSFCell cell = (XSSFCell)row.GetCell(j);

               if(cell != null && cell.CellType == CellType.Formula)
               {
                   helper.EvaluateFormulaCell(cell);
               }
          }
     }
 }
奇怪的是,当我在Excel中跟踪评估时,它会一直进行到最后一步。然后,值突然变为
#值

有人知道这是怎么回事吗


为了谨慎起见,我将NPOI更新为最新的.NET版本(2.1.3.1)。这仍然没有解决问题

当我单击公式中的单元格,更改其值,然后按Enter键确认时,公式计算结果正确。这意味着公式本身不应该有任何问题

我通过手工计算解决了这个问题。这不是我的长期解决方案,因为用户应该能够插入他们自己的计算,但这是除了使用另一个Excel框架(糟糕的规划;)之外,我现在唯一能想到的解决方案

private void ForceCalculateSheet()
{
      XSSFFormulaEvaluator helper = (XSSFFormulaEvaluator)workbook.GetCreationHelper().CreateFormulaEvaluator();

      for(int i = 0; i<sheet.LastRowNum; i++)
      {
          XSSFRow row = (XSSFRow)sheet.GetRow(i);

          for(int j = 0; j< row.LastCellNum; j++)
          {
               XSSFCell cell = (XSSFCell)row.GetCell(j);

               if(cell != null && cell.CellType == CellType.Formula)
               {
                   helper.EvaluateFormulaCell(cell);
               }
          }
     }
 }
=IF(D37-C37-E37>0;D37-C37-E37;0)
=INT(J39/60)
=J39-C39*60