Search code examples
c#excelexcel-2007excel-interop

C# - How do I iterate all the rows in Excel._Worksheet?


I am looking to programmatically pull data from an Excel worksheet and insert it into a database table.

How do I determine the number of columns and rows in a worksheet or otherwise iterate the rows?

I have

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

I tried worksheet.Range.Rows.Count

which tosses up

Indexed property 'Microsoft.Office.Interop.Excel._Worksheet.Range' has non-optional arguments which must be provided

What needs to be done?


Solution

  • 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);
        }
    }
    

    This compiles and runs just great for me! I'm using it to extract rows with missing fields to an error log.