2011-01-23 2 views
27

С EPPlus и OpenXML кто-нибудь знает синтаксис о том, как подсчитывать строки?C# EPPlus OpenXML count rows

Say мой лист называется "лист"

int numberRows = worksheet.rows.count()? или worksheet.rows.dimension

Я, конечно, заинтересован в ответе, но как найти ответ было бы здорово, как «Перейти к определению» и посмотреть на это или что, и т.д.

+0

хорошая почта .. +1 .. У вас действительно есть хорошая документация на EPPlus? – MacGyver

+0

У меня нет, но примеры, содержащиеся в загрузке, были полезны. – rd42

+1

Есть более эффективные способы сделать это сейчас, используя свойства «Rows» и «Columns» из DImension. –

ответ

58

С объекта листа называется «рабочий лист», рабочий лист.Dimension.Start.Row и рабочий лист.Dimension.End.Row должен предоставить вам необходимую вам информацию.

рабочий лист.Dimension.Address предоставит вам строку, содержащую размеры листа в традиционном формате диапазона Excel (например, «A1: I5» для строк 1-5, столбцы 1-9).

Существует documentation file available. Во многих случаях было бы так же быстро поиграть с библиотекой и найти ответ таким образом. По-видимому, EPPlus хорошо спроектирован - все, по-видимому, логически названо.

+5

+1 для правильного ответа со ссылкой, но я не согласен с вашим комментарием о «EPPlus, кажется, хорошо разработан». Я попытался использовать его сам, и API прост, но многие примеры файлов xlsx, которые я пробовал у разных пользователей, генерировали исключение NullReferenceException внутри библиотеки. Я прошел через библиотеку, чтобы определить, что вызывает проблему, и сделано много предположений, которые вызывают чтение достоверных * .xlsx, сгенерированных Excel, чтобы не загружаться. Я бы просмотрел EPPlus в качестве тикающей бомбы замедленного действия в вашем коде, если вы читаете файлы, предоставленные пользователем. –

+2

Достаточно честно - я должен признать, что я никогда не использовал библиотеку для чтения существующих электронных таблиц, просто писал новые. Для последней цели EPPlus хорошо послужил мне. Проект, похоже, находится в активном развитии, поэтому давайте надеяться, что в будущих выпусках будут устранены ошибки. – Quppa

+1

У меня никогда не было проблем с чтением существующих файлов XLS/XLSX с помощью EPPlus. Возможно, вы использовали бета-версию. –

12

Спасибо за этот вопрос. Куппа. Я использовал его в своем стремлении заполнить DataTable из книги Spreadsheet, как показано ниже:

/// <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

Спасибо, что разместили свой код @Kwex. – rd42

+0

@Kwex Ваш ответ помог мне так +1 и спасибо ... – RajeshKdev

+0

Как насчет использования WorkSheet.Dimensions.Rows? – MGE

1

Я работаю с версией 4.1, и, похоже, они добавили некоторые свойства (упомянутые в комментарии от предыдущих ответов), чтобы сделать это Полегче.

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