簡體   English   中英

C#Interop.Excel'#N / A'單元格值轉換為-2146826246

[英]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;
}

Visual Studio調試

我嘗試單獨檢查每個單元格,但這會使應用程序減慢到無法使用的位置(大多數工作簿都有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM