C#如何迭代Excel列

4
我想获取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循环?


以上代码在语法上是否正确? - Rameez Ahmed Sayad
foreach不是解决方案。这正是我的问题所在。我该如何迭代特定列的单元格(在我的情况下,我想要第三列)? - CodeMonkey
2个回答

8

你的循环将如下所示:

    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
为了让事情更清晰,我也不确定这段代码是否完全不需要转换。 - varocarbas
那么如果列是范围,这是否意味着我在 foreach 循环中迭代的是不是 Excel.Range? - CodeMonkey
我认为只需要进行轻微的更正,即单元格c中的大小写应该是大写。col.Cells - Rameez Ahmed Sayad
@YonatanNir,我不确定我是否理解你的意思。如果列是范围,则可以通过迭代进行:列(只有一个),行(取决于使用范围的大小),单元格(与行数相同)。因此,您需要声明col.Cells以通知编译器您要迭代哪个集合。 - Kazimierz Jawor
显示剩余2条评论

5

我认为没有其他好的方法,只能通过循环需要的索引并使用Cells或Rows来实现:

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

然而,需要注意的是,如果您正在读取和/或写入所有单元格,则最好将整个列读取/写入为对象数组,然后循环遍历数组项,如我在我的答案中所述。不仅速度更快,而且由于现在处理简单的C#数组,您还可以使用更美观的语言结构进行循环。
据我所知,唯一需要循环而不是执行此操作的原因是,如果您要访问诸如条件格式等内容,而不仅仅是单元格内容,并且无法在一个语句中编写它们的整个范围。但是,也可能有使用数组来完成这些操作的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接