2011-01-23 34 views
27

Với EPPlus và OpenXML có ai biết cú pháp về cách đếm các hàng không?C# EPPlus OpenXML đếm hàng

Giả sử trang tính của tôi được gọi là "bảng tính"

int numberRows = worksheet.rows.count()? hoặc worksheet.rows.dimension

Tôi chắc chắn quan tâm đến câu trả lời, nhưng làm thế nào để tìm ra câu trả lời sẽ được mát mẻ để, như "Đến định nghĩa" và tìm kiếm này hay cái kia, vv

+0

bài đăng đẹp .. +1 .. Bạn có bất kỳ tài liệu nào tốt về EPPlus không? – MacGyver

+0

Tôi không, nhưng các ví dụ có trong phần tải xuống là hữu ích. – rd42

+1

Có nhiều cách hiệu quả hơn để thực hiện việc này ngay bây giờ bằng cách sử dụng các thuộc tính "Hàng" và "Cột" từ DImension. –

Trả lời

58

Với một đối tượng bảng gọi 'worksheet', worksheet.Dimension.Start.Row và worksheet.Dimension.End.Row sẽ cung cấp cho bạn thông tin bạn cần.

trang tính.Dimension.Address sẽ cung cấp cho bạn chuỗi chứa thứ nguyên trang tính theo định dạng phạm vi Excel truyền thống (ví dụ: 'A1: I5' cho các hàng 1-5, cột 1-9).

Có một số documentation file available. Trong nhiều trường hợp, nó có thể chỉ là nhanh chóng để chơi xung quanh với các thư viện và tìm câu trả lời theo cách đó. EPPlus dường như được thiết kế tốt - mọi thứ dường như được đặt tên hợp lý, ít nhất.

+5

+1 cho câu trả lời đúng với liên kết, nhưng tôi không đồng ý với nhận xét của bạn về "EPPlus dường như được thiết kế tốt". Tôi đã thử sử dụng nó bản thân mình và API là đơn giản, nhưng nhiều mẫu xlsx tập tin tôi đã cố gắng từ cá nhân khác nhau tạo ra một NullReferenceException bên trong thư viện. Tôi đã bước qua thư viện để xác định nguyên nhân gây ra sự cố và rất nhiều giả định được thực hiện khiến đọc có giá trị * .xlsx được tạo bởi Excel để không tải được. Tôi muốn xem EPPlus như một quả bom hẹn giờ trong mã của bạn nếu bạn đang đọc các tệp do người dùng cung cấp. –

+2

Đủ công bằng - Tôi phải thừa nhận tôi chưa bao giờ sử dụng thư viện để đọc các bảng tính hiện có, chỉ cần viết các bảng tính mới. Đối với mục đích sau EPPlus đã phục vụ tôi tốt. Dự án dường như đang được phát triển tích cực, vì vậy, chúng tôi hy vọng sẽ có thêm nhiều lỗi trong các bản phát hành trong tương lai. – Quppa

+1

Tôi chưa bao giờ gặp sự cố khi đọc tệp XLS/XLSX hiện có với EPPlus. Có thể bạn đã sử dụng phiên bản beta. –

12

Cảm ơn lời khuyên đó Quppa. Tôi đã sử dụng nó trong nỗ lực của tôi để cư một DataTable từ một bảng tính Workbook như sau:

/// <summary> 
    /// Converts a Worksheet to a DataTable 
    /// </summary> 
    /// <param name="worksheet"></param> 
    /// <returns></returns> 
    private static DataTable WorksheetToDataTable(ExcelWorksheet worksheet) 
    { 
     // Vars 
     var dt = new DataTable(); 
     var rowCnt = worksheet.Dimension.End.Row; 
     var colCnt = worksheet.Dimension.End.Column + 1; 

     // Loop through Columns 
     for (var c = 1; c < colCnt; c++) 
     { 
      // Add Column 
      dt.Columns.Add(new DataColumn()); 

      // Loop through Rows 
      for(var r = 1; r < rowCnt; r++) 
      { 
       // Add Row 
       if (dt.Rows.Count < (rowCnt-1)) dt.Rows.Add(dt.NewRow()); 

       // Populate Row 
       dt.Rows[r - 1][c - 1] = worksheet.Cells[r, c]; 
      } 
     } 

     // Return 
     return dt; 
    } 
+1

Cảm ơn bạn đã đăng mã @Kwex. – rd42

+0

@Kwex Câu trả lời của bạn đã giúp tôi như vậy +1 và Cảm ơn ... – RajeshKdev

+0

Điều gì về việc sử dụng WorkSheet.Dimensions.Rows? – MGE

1

tôi đang làm việc với phiên bản 4.1 và có vẻ như họ đã thêm một số tài sản (nêu trong ý kiến ​​từ câu trả lời trước) để làm điều này dễ dàng hơn.

string Filepath = "c:\excelfile.xlsx"; 
FileInfo importFileInfo = new FileInfo(FilePath); 
using(var excelPackage = new ExcelPackage(importFileInfo)) 
{ 
    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets[1]; 
    int rowCount = worksheet.Dimension.Rows; 
    int colCount = worksheet.Dimension.Columns; 
}