我有一个 C# 应用程序,它利用 Interop.Excel (v15) 打开一些客户数据工作簿,解析它们并输出一些信息。我遇到的问题是某些工作簿单元格的值为#N/A;在 Excel 中,它是一个 CVErr,表明存在某种类型的错误。在我们的客户数据上下文中,他们使用#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;
}
我尝试单独检查每个单元格,但这使应用程序速度减慢到无法使用的程度(大多数工作簿有 10,000 行 X 38 列)。我尝试转换为 Text、Value 和 Value2,但无济于事。我需要能够以真实形式读取 #N/A 值,以便我可以运行比较并稍后将值输出到另一个工作簿。实现这一目标的最佳方法是什么?
最佳答案
下面的链接可能会对您有所帮助。
https://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-solutions/
我不确定,但我的建议是,由于 -2146826246 是 #N/A 值的代码,您可以检查单元格值/文本是否相同,并且可以将 #N/A 添加为列表中的文本“lst”。
但更好的方法是使用 OpenXml 从 Excel 检索数据。
关于C# Interop.Excel '#N/A' 单元格值转换为 -2146826246,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802142/