2015-02-11 40 views
2

我有一張看起來像這樣的Excel工作表。 | A1 | B1 | 「BLANK」| D1 | E1 | F1 | 也就是說只填充第一行,第三列空白。使用interop.Excel在C#中的Excel範圍。範圍都是空的而不是空的?

 Excel.Application exApp = OpenExcel(); 
     String mySheet = @"C:\c#\rapport.xlsx"; 
     Excel.Workbook wb = exApp.Workbooks.Open(mySheet); 
     Excel.Worksheet ws = wb.Sheets[1]; 
     Excel.Range row = ws.Rows[1]; 

我創建了一個新的範圍僅由

 Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants); 

含第1行中的非空單元格現在:我在C#中以下列方式使用interop.excel解析這個,如果我使用rng.Select我的工作表中的所有非空單元格都被選中。如果我使用rng.Count它將返回5,這是我的工作表中非空單元格的數量。但仍然當我使用單元格打印時:

Console.WriteLine(rng[1,i].Value.ToString()); 

它顯示rng [1,1-2]包含「A1和B1」,這很好。但是 rng [1,3]是空的或空的。 rng [1,4-7]包含D1-F1。

這怎麼可能?

我的主要目標是將所有非空值存儲在字符串數組中。但是我不能選擇正確的值,因爲我的範圍rng都是空的,而非空是一種奇怪的方式。

+0

您需要使用foreach結構迭代rng中的單元格。使用'.Item'方法並不侷限於範圍內的實際單元格 - 它只是相對於範圍的第一個單元格。 – Rory 2015-02-11 09:42:59

+0

謝謝隊友!這解決了它! – kPuck 2015-02-11 10:36:38

回答

0

這解決了它!但是,我沒有使用.Item方法來存儲Rory建議的值。 Thnx Rory!

 string[] str = new String[rng.Count]; 
     int i = 0; 

     foreach (Excel.Range cell in rng.Cells) 
     { 
      str[i] = cell.Value.ToString(); 
      i++; 
     } 

     for (int j = 0; j < str.Length; j++) 
      Console.WriteLine(str[j]); 
0

嘗試使用:

ws.Columns.ClearFormats(); 
ws.Rows.ClearFormats(); 

,以確保您的範圍排除了格式化,但空單元格。

闖闖可以得到:

Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants,Type.Missing); 
+0

謝謝,但它沒有幫助。我仍然得到一個空值存儲在我的rng中。我不明白。它清楚地突出表格中所有非空單元格,它也表示它只包含5個非空單元格但仍然存在,rng中的第三個位置存儲空值。 – kPuck 2015-02-11 09:40:09