C# - 如何遍历Excel._Worksheet中的所有行?

24

我想通过编程从Excel工作表中提取数据并将其插入到数据库表中。

如何确定工作表中的列数和行数,或者以其他方式迭代行?

我有以下代码:

Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet;

我尝试了worksheet.Range.Rows.Count

但是出现了以下错误

索引属性'Microsoft.Office.Interop.Excel._Worksheet.Range'具有必须提供的非可选参数

需要做什么?


你正在使用哪个版本的Excel? - JohnFx
2个回答

44
using Excel = Microsoft.Office.Interop.Excel;
...

public void IterateRows(Excel.Worksheet worksheet)
{
    //Get the used Range
    Excel.Range usedRange = worksheet.UsedRange;
    
    //Iterate the rows in the used range
    foreach(Excel.Range row in usedRange.Rows)
    {
        //Do something with the row.
    
        //Ex. Iterate through the row's data and put in a string array
        String[] rowData = new String[row.Columns.Count];
        
        for(int i = 0; i < row.Columns.Count; i++)
            rowData[i] =Convert.ToString(row.Cells[1, i + 1].Value2);
    }
}

这段代码对我来说编译和运行都很好!我正在使用它将缺失字段的行提取到错误日志中。


应该是 String[] rowData = new String[row.Columns.Count]; - eomeroff
那个foreach循环的行应该是foreach(Excel.Range row in usedRange.Rows)吗? - Rob Koch
2
请注意,这种方法对于很多用途来说可能太慢了,将整个范围转换为对象数组之后再进行迭代会加速处理。 - Dave Ross
当我尝试迭代usedRange.Rows时,出现了“无法从程序集'System.Private.CoreLib...'中加载类型'System.Runtime.InteropServices.ComTypes.IEnumerator'”的错误。 - micahhoover

18

我猜你实际上是要找到最后使用的行。如果是这样,你需要这样写:

Range UsedRange = worksheet.UsedRange;
int lastUsedRow = UsedRange.Row + UsedRange.Rows.Count - 1;

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