[英]C# Interop.Excel '#N/A' Cell Value converted to -2146826246
我有一個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和Value2無濟於事。 我需要能夠以它們的真實格式讀取#N / A值,以便我可以進行比較,然后將值輸出到另一個工作簿。 實現此目標的最佳方法是什么?
可能在下面的鏈接將為您提供幫助。
https://xldennis.wordpress.com/2006/11/29/dealing-with-cverr-values-in-net-part-ii-solutions/
我不確定,但是我的建議是,由於-2146826246是#N / A值的代碼,因此您可以檢查單元格值/文本是否相同,也可以在列表“ lst”中將#N / A添加為文本。
但是更好的方法是使用OpenXml從excel檢索數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.