2011-10-11 103 views
16

我正在尋找以編程方式從Excel工作表中拉出數據並將其插入到數據庫表中。C# - 如何迭代Excel._Worksheet中的所有行?

如何確定工作表中的列數和行數,或者迭代行數?

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

我試圖worksheet.Range.Rows.Count

它扔了

索引屬性 'Microsoft.Office.Interop.Excel._Worksheet.Range' 有 非可選參數必須提供

需要做什麼?

+0

您使用的是哪個版本的excel? – JohnFx

回答

15

我認爲你實際上是在尋找最後使用的行。在這種情況下,你需要把它寫這樣的:

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

這比我想的要好。 –

1

查看Excel中的UsedRange屬性。

+0

在即時窗口中,這將返回'來自HRESULT的異常:0x800401A8'。錯誤代碼-2147221080。 InnerException = null –

+0

無論出於何種原因,都不能使用Visual Studio的立即窗口。在代碼中正常工作。沒什麼大不了的,不在乎立即。 –

28
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] = row.Cells[1, i + 1].Value2.ToString(); 
    } 
} 

這編譯和運行好了我!我正在使用它將缺少字段的行提取到錯誤日誌中。

+0

應該是String [] rowData = new String [row.Columns.Count]; – eomeroff

+0

該foreach行是foreach(usedRange.Rows中的Excel.Range行)? –

+0

的確應該! – nicholeous