在closedxml中计算公式

我在closedxml中使用了一个公式:

var result = worksheet.Cell(3, 8); result.FormulaA1 = "=IF(ISNA(VLOOKUP(G3,OrganizationUnitsById,2,FALSE))," + "" + ",VLOOKUP(G3,OrganizationUnitsById,2,FALSE))"; 

当我之前使用这个公式,它完美地运作。 但后来我改了一些东西,然后这个公式没有自动计算。 我从应用程序保存文件,这个公式工作,但没有自动计算。

哪里不对?

我的实验显示你的公式抛出了下面的exception:

ClosedXML.dll中发生未处理的types为“System.NotSupportedException”的exception

这里是testrig:

 var wb = new ClosedXML.Excel.XLWorkbook(); var worksheet = wb.AddWorksheet("test"); worksheet.Cell("G3").Value = "fu"; worksheet.Cell("A1").Value = "fu"; worksheet.Cell("B1").Value = "bar"; worksheet.Cell("C1").Value = "baz"; worksheet.Cell("A2").Value = "fu2"; worksheet.Cell("B2").Value = "bar2"; worksheet.Cell("C2").Value = "baz2"; worksheet.Range("A1:C2").AddToNamed("OrganizationUnitsById"); var result = worksheet.Cell(3, 8); result.FormulaA1 = "=IF(ISNA(VLOOKUP(G3,OrganizationUnitsById,2,FALSE))," + "" + ",VLOOKUP(G3,OrganizationUnitsById,2,FALSE))"; wb.CalculateMode = ClosedXML.Excel.XLCalculateMode.Auto; Console.WriteLine(result.Value); // throws exception 

它引发的原因是由于在你的公式中使用ISNA函数。 它还没有实施 。 从您的公式中删除ISNA解决了计算问题,但这将导致该公式的不同行为。

你必须findISNAfunction的替代scheme。 在写这篇文章的时候,select其中的一个:ISBLANK,ISEVEN,ISLOGICAL,ISNUMBER,ISODD,ISTEXT,N或者在你的查找表中设置数据,所以你不需要检查ISNA。

正如我的例子用0.88testing的,你可以获取Beta版本ClosedXML 0.89.0-beta1,因为ISNA是在PR441中实现的。