我有一个C#应用程序,它利用Interop.Excel(v15)打开一些客户数据工作簿,解析它们并输出一些信息。我遇到的问题是某些工作簿单元格的值为#N / A;在Excel中说的是CVErr,表明存在某种类型的错误。在我们的客户数据的背景下,他们使用#N / A表示不适用 - 没有潜在的公式问题,它只是他们使用的价值。
当我使用以下函数遍历工作表行时,每次遇到#N / A时,我得到的Int值为-2146826246:
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;
}
我尝试单独检查每个单元格但是将应用程序放慢到无法使用的位置(大多数工作簿都有10,000行X 38列)。我尝试过转换为Text,Value和&amp; Value2无济于事。我需要能够以真实形式读取#N / A值,以便我可以运行比较,然后将值输出到另一个工作簿。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
可能会在链接下面帮助你。
https://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-solutions/
我不确定,但我的建议是,由于-2146826246是#N / A值的代码,您可以检查相同的单元格值/文本,您可以在列表中添加#N / A作为文本& #34; LST&#34 ;.
但更好的方法是使用OpenXml从excel中检索数据。