2014-03-01 99 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