2014-03-01 129 views
3

我想(以標題狀態)以編程方式從Excel文件中讀取值。一行一行,然後逐個單元格,以便自由創建單元格數據外的自定義集合。逐行讀取excel文件,逐個單元格C#

questions幫了我。

但我需要更靈活的代碼。例如,我可以寫(*僅適用於所有列)

  Range range1 = worksheet.get_Range("*1", Missing.Value) 

      foreach (Range r in range1) 
      { 
       string user = r.Text; 
       string value = r.Value2; 
      } 

並且只要存在下一個,就迭代第1行中的所有單元。 必須有一些優雅的方式來遍歷C#中的行和單元格。

+0

範圍是'IEnumerable'? –

+0

[用c#.net逐行讀取excel數據]可能的重複(http://stackoverflow.com/questions/16160676/read-excel-data-line-by-line-with-c-sharp-net) – mcy

+0

@mcy您建議的鏈接與interop無關。 – varocarbas

回答

3

您可以依靠Rows/Columns屬性,然後遍歷所有包含的範圍(Cells)。示例代碼:

Range range1 = worksheet.Rows[1]; //For all columns in row 1 
//Range range1 = worksheet.Columns[1]; //for all rows in column 1 

foreach (Range r in range1.Cells) //range1.Cells represents all the columns/rows 
{ 
    // r is the range of the corresponding cell 
} 
+0

我應該檢查r.Text是否爲空字符串中斷? – eomeroff

+0

@eomeroff r是一個與單元格(例如「A1」)相關的正常範圍,因此您可以使用它來處理任何您想要的內容。 – varocarbas

+0

什麼時候會在這種情況下foreach停止? – eomeroff

1

試試這個:

Excel.Range r = worksheet.get_Range("*1", Missing.Value); 
for (int j = 0; j < r.Rows.Count; j++) { 
    Excel.Range currentCell = r.Rows[j + 1] as Excel.Range; 
} 
+0

發佈之前您是否嘗試過這些代碼? 「* 1」不代表Excel中的第1列。我試過了,崩潰了。 – varocarbas