2013-08-05 34 views
2

我想獲得一個Excel工作表的特定列,然後遍歷它的單元格。我希望它看起來像這樣:C#如何迭代excel列

Excel.Workbook workbook = app.Workbooks.Open(svDropPath); 
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)workbook.Sheets["Sheet Name"]; 
var col = xlWorkSheet.UsedRange.Columns["C:C", Type.Missing]; // I want the 3rd column 
foreach(Cell c in col) 
.... 

我該如何實際使這個foreach循環?

+0

上述代碼在語法上是否正確? –

+0

這個foreach不是。這正是我的問題。我如何迭代特定列的單元格(在我的情況下,我想要第三列) –

回答

6

你的循環將看起來如下:

foreach (Excel.Range item in col.Cells) 
    { 
     //whatever you want to do with your cells, here- msgbox of cells value 
     MessageBox.Show(Convert.ToString(item.Value)); 
    } 
+1

你比我快:)在這裏你有一點你錯過了:Excel.Range col =( Excel.Range)xlWorkSheet.Columns [「C:C」,Type.Missing]; – varocarbas

+1

不需要,因爲OP的'var col = ...'也不錯。 –

+0

使事情更清晰。也不確定這段代碼是否可以在沒有投射的情況下工作。 – varocarbas

3

我相信這是做,而不是通過所討論的指數環其他的沒有很好的方式,並使用任一單元格或行:

for (int i = 1; i <= max; i++) 
{ 
    Range cell = col.Cells[i, 1]; 
    // or 
    Range cell = col.Rows[i]; 
} 

但是,請注意,如果您正在讀取和/或寫入所有單元格,則最好從整個對象數組讀取/寫入整個列,然後遍歷數組項,如我的回答中所述https://stackoverflow.com/a/18058144/1737957 。這不僅更快,您還可以使用更好的語言結構進行循環,因爲您現在正在處理一個簡單的C#數組。

你必須循環而不是做這個AFAIK的唯一原因是如果你正在訪問像條件格式等東西,而不是單元格內容,並且你不能在一個語句中寫出它們的全部範圍。然而,使用數組也可能有這些方法。