C#Interop.Excel'#N / A'单元格值转换为-2146826246

我有一个C#应用程序,利用Interop.Excel(v15)打开一些客户数据的工作簿,parsing他们,并输出一些信息。 我遇到的问题是,某些工作簿单元格的值为#N / A; 在Excel中讲的是CVErr,指示存在某种types的错误。 在我们的客户数据的背景下,他们使用#N / A表示不适用 – 没有基本的公式问题,它只是他们使用的价值。

当我使用下面的函数来遍历工作表行时,每次遇到#N / A时,我都会得到一个-2146826246的Int值:

private void traverseRows(Excel._Worksheet worksheet) { //Get the used Range Excel.Range usedRange = worksheet.UsedRange; //Last Row/Column int lastUsedRow = usedRange.Row + usedRange.Rows.Count - 1; int lastUsedColumn = usedRange.Column + usedRange.Rows.Columns.Count; foreach (Excel.Range row in usedRange.Rows) { List<String> rowData = rangeToList(row); } } List<string> rangeToList(Microsoft.Office.Interop.Excel.Range inputRng) { object[,] cellValues = (object[,])inputRng.Value2; List<string> lst = cellValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x)); return lst; } 

Visual Studio调试

我试图单独检查每个单元格,但是这会将应用程序放慢到无法使用的地步(大多数工作簿有10,000行X 38列)。 我试图转换为文本,价值和Value2无济于事。 我需要能够以#真正的forms读取#N / A值,所以我可以运行比较,然后将该值输出到另一个工作簿。 什么是达到这个目的的最好方法?

可能会在下面的链接将帮助你。

https://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-solutions/

我不确定,但只是我的build议是,因为-2146826246是#N / A值的代码,您可以检查单元格值/文本相同,您可以添加#N / A作为文本在您的列表“第一”。

但更好的方法是使用OpenXml从Excel中检索数据。