C# 用closedxml计算公式

C# 用closedxml计算公式,c#,excel,closedxml,C#,Excel,Closedxml,我在closedxml中使用了一个公式: var result = worksheet.Cell(3, 8); result.FormulaA1 = "=IF(ISNA(VLOOKUP(G3,OrganizationUnitsById,2,FALSE))," + "" + ",VLOOKUP(G3,OrganizationUnitsById,2,FALSE))"; 我以前用过这个公式,效果很好。但后来我改变了一些东西,然后

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

var result = worksheet.Cell(3, 8);
result.FormulaA1 = "=IF(ISNA(VLOOKUP(G3,OrganizationUnitsById,2,FALSE))," 
                 + "" 
                 + ",VLOOKUP(G3,OrganizationUnitsById,2,FALSE))";
我以前用过这个公式,效果很好。但后来我改变了一些东西,然后这个公式没有自动计算。我从一个应用程序保存了一个文件,这个公式有效,但没有自动计算


怎么了?

我的实验表明,您的公式引发了以下异常:

ClosedXML.dll中发生类型为“System.NotSupportedException”的未处理异常

以下是测试平台:

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
可以解决计算问题,但这将导致该公式的不同行为

您必须为
ISNA
功能找到一个替代方案。在撰写本文之日,选择以下选项之一:ISBLANK、ISEVEN、ISLOGICAL、ISNUMBER、ISODD、ISTEXT、N,或者在查找表中对数据进行形状化处理,这样就不需要检查“ISNA”


由于我的示例使用0.88进行了测试,您可以获取测试版ClosedXML 0.89.0-beta1,因为
ISNA
是在中实现的。

我的实验表明,您的公式引发了以下异常:

ClosedXML.dll中发生类型为“System.NotSupportedException”的未处理异常

以下是测试平台:

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
可以解决计算问题,但这将导致该公式的不同行为

您必须为
ISNA
功能找到一个替代方案。在撰写本文之日,选择以下选项之一:ISBLANK、ISEVEN、ISLOGICAL、ISNUMBER、ISODD、ISTEXT、N,或者在查找表中对数据进行形状化处理,这样就不需要检查“ISNA”



正如我的示例使用0.88进行测试一样,您可以获取测试版ClosedXML 0.89.0-beta1,因为
ISNA
是在中实现的。

我在ClosedXML中创建的。但是计算没有发生。当我打开excel并再次输入此公式时,它将进行计算。我如何通过另一种方式进行计算?但是ClosedXML具有计算模式属性,我使用了它,它不再工作。ClosedXML从未计算公式?在我能用ClosedXML完成之前。但是现在不起作用了吗?您尝试过ClosedXML 0.89.0-beta1吗?它在Nuget上可用。我在ClosedXML中创建了它。但计算没有发生。当我打开excel并再次输入此公式时,它将进行计算。我如何通过另一种方式进行计算?但是ClosedXML具有计算模式属性,我使用了它,它不再工作。ClosedXML从未计算公式?在我能用ClosedXML完成之前。但是现在不起作用了吗?您尝试过ClosedXML 0.89.0-beta1吗?但当我使用这个公式时:“=VLOOKUP(G3,OrganizationUnitsById,2,FALSE).结果是一样的当我打开时,它将在表中的第一行工作,然后如果我想输入第二行或第三行..在表中,计算将不起作用。这是个问题。你能理解我吗?不,我不理解。如果你在你的问题中创建一个类似于我所做的,并重现你的问题,那将非常有帮助。你当前的问题是一个问题回答。我用ClosedXML编写了这个公式,我想在我的应用程序中创建一个模板。当我保存模板并打开excel时,这个公式在表格的第一行起作用。但是当我转到第二行并选择任何值时,计算不起作用。我必须再次选择公式,然后单击“回车”按钮,然后计算再次起作用。B但我不想点击回车键,我想在我创建这个公式并保存模板时,表格中的所有行都能正常工作看看这张图片。也许你可以理解,但当我使用这个公式:“=VLOOKUP(G3,OrganizationUnitsById,2,FALSE)。结果是一样的当我打开时,它会正常工作表格中的第一行,然后如果我想输入第二行或第三行。。表中的行,计算将不起作用。这是个问题。你能理解我吗?不,我不懂。如果你在你的问题中创建一个类似于我所做的,并重现你的问题,这将非常有帮助。您当前的问题已得到回答。我在ClosedXML中编写了此公式,并希望在我的应用程序中创建一个模板。当我保存模板并打开excel时,此公式在表的第一行起作用。但当我转到第二行并选择任何值时,计算不起作用。我必须再次选择公式并单击“输入”按钮,然后计算再次开始。但是我不想点击回车键,我想在我创建这个公式和保存模板时,表格中的所有行都可以看到这张图片。也许你能理解