2011-10-11 6 views
16

Tôi đang tìm kéo dữ liệu theo chương trình từ trang tính Excel và chèn nó vào bảng cơ sở dữ liệu.C# - Làm cách nào để lặp lại tất cả các hàng trong Excel._Worksheet?

Làm cách nào để xác định số cột và hàng trong trang tính hoặc lặp lại các hàng?

Tôi có

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

tôi đã cố gắng worksheet.Range.Rows.Count

mà tung lên

tài sản được lập chỉ mục 'Microsoft.Office.Interop.Excel._Worksheet.Range' có đối số không bắt buộc phải được cung cấp

Cần phải làm gì?

+0

Bạn đang làm việc với phiên bản excel nào? – JohnFx

Trả lời

15

Tôi đoán bạn đang thực sự tìm kiếm hàng được sử dụng gần đây nhất. Trong trường hợp đó bạn cần phải viết nó như thế này:

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

Đây là một điều tốt hơn những gì tôi nghĩ đến. –

1

Hãy xem thuộc tính UsedRange trong Excel.

+0

Trong cửa sổ ngay lập tức, điều này trả về 'Ngoại lệ từ HRESULT: 0x800401A8'. mã lỗi -2147221080. InnerException = null –

+0

Vì lý do gì, không thể sử dụng cửa sổ Immediate của studio trực quan. Hoạt động tốt trong mã. Không có vấn đề lớn, không quan tâm ngay lập tức. –

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

này biên dịch và chạy chỉ tuyệt vời đối với tôi! Tôi đang sử dụng nó để trích xuất các hàng có các trường bị thiếu vào nhật ký lỗi.

+0

Phải là chuỗi [] rowData = new String [row.Columns.Count]; – eomeroff

+0

Nên dòng foreach được foreach (Excel.Range hàng trong usedRange.Rows)? –

+0

Thực tế là nó nên! – nicholeous