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

时间:2017-03-15 06:02:21

标签: c# excel office-interop excel-interop

我有一个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;
}

Visual Studio Debug

我尝试单独检查每个单元格但是将应用程序放慢到无法使用的位置(大多数工作簿都有10,000行X 38列)。我尝试过转换为Text,Value和&amp; Value2无济于事。我需要能够以真实形式读取#N / A值,以便我可以运行比较,然后将值输出到另一个工作簿。实现这一目标的最佳方法是什么?

1 个答案:

答案 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中检索数据。