2017-08-27 260 views
0

我closedxml使用的公式:計算公式中closedxml

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

當我之前使用這個公式,它的工作完美。但後來我改變了一些,然後這個公式不會自動計算。我從一個應用程序保存文件,這個公式工作,但沒有自動計算。

出了什麼問題?

+0

我在ClosedXML中創建了它,但沒有發生計算。當我打開Excel時,我再次輸入此公式,然後計算 –

+0

如何以另一種方式進行計算? –

+0

但ClosedXML有計算模式屬性,我用它,它不再工作 –

回答

2

我的實驗表明公式拋出以下異常:

'System.NotSupportedException' 類型的未處理的異常出現在ClosedXML.dll

這裏是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函數。它isn't yet implemented。從公式中刪除ISNA可解決計算問題,但這會導致該公式的不同行爲。

您必須爲ISNA函數找到替代方案。在撰寫之日,請選擇以下其中一種:ISBLANK,ISEVEN,ISLOGICAL,ISNUMBER,ISODD,ISTEXT,N或在查找表中設置數據,因此您不需要檢查ISNA。

正如我的例子使用0.88進行測試,您可以獲取測試版ClosedXML 0.89.0-beta1,因爲ISNAPR441中實現。

+0

但是,當我使用這個公式:「= VLOOKUP(G3,OrganizationUnitsById,2,FALSE).Result是相同的 –

+0

不在我測試,那麼它的工作 – rene

+0

當我打開時,它將工作表中的第一行,然後如果我想在表格中輸入第二或第三行,計算不起作用,這是問題,你能理解我嗎? –