2011-01-23 19 views
27

Con EPPlus e OpenXML qualcuno conosce la sintassi su come contare le righe?C# EPPlus Righe di conteggio OpenXML

dire il mio foglio di lavoro si chiama "foglio di lavoro"

int numberRows = worksheet.rows.count()? o worksheet.rows.dimension

Sono certamente interessa la risposta, ma come trovare la risposta sarebbe bello, come "Vai a definizione" e cercare questo o quello, ecc

+0

bel post .. +1 .. Ti capita di avere qualche buona documentazione su EPPlus? – MacGyver

+0

Io no, ma gli esempi contenuti nel download sono stati utili. – rd42

+1

Ora esistono modi più efficienti per eseguire questa operazione utilizzando le proprietà "Righe" e "Colonne" dalla DIMENSIONE. –

risposta

58

Con un oggetto foglio di lavoro chiamato 'worksheet', worksheet.Dimension.Start.Row e worksheet.Dimension.End.Row dovrebbero darti le informazioni che ti servono.

worksheet.Dimension.Address fornirà una stringa contenente le dimensioni del foglio di lavoro nel tradizionale formato di intervallo di Excel (ad esempio "A1: I5" per le righe 1-5, colonne 1-9).

C'è un documentation file available. In molti casi potrebbe essere altrettanto veloce giocare con la libreria e trovare la risposta in questo modo. EPPlus sembra essere ben progettato - tutto sembra essere chiamato logicamente, almeno.

+5

+1 per la risposta corretta con link, ma non sono d'accordo con il tuo commento su "EPPlus sembra essere ben progettato". Ho provato a usarlo da solo e l'API è semplice, ma molti file xlsx di esempio che ho provato da varie persone hanno generato una NullReferenceException all'interno della libreria. Ho fatto un passo attraverso la libreria per identificare ciò che stava causando il problema, e sono state fatte molte ipotesi che fanno sì che il caricamento di * .xlsx generato da Excel valido non riesca a caricare. Vedrei EPPlus come una bomba a orologeria nel tuo codice se stai leggendo i file forniti dall'utente. –

+2

Abbastanza giusto - Devo ammettere che non ho mai usato la libreria per leggere i fogli di calcolo esistenti, semplicemente scrivendone di nuovi. Per quest'ultimo scopo, EPPlus mi ha servito bene. Il progetto sembra essere in fase di sviluppo attivo, quindi speriamo che altri bug vengano risolti nelle versioni future. – Quppa

+1

Non ho mai avuto problemi a leggere i file XLS/XLSX esistenti con EPPlus. Forse hai usato una versione beta. –

12

Grazie per il suggerimento Quppa. L'ho usato nel mio tentativo di popolare un DataTable da un foglio di cartella di lavoro come di seguito:

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

Grazie per aver pubblicato il tuo codice @Kwex. – rd42

+0

@Kwex La tua risposta mi ha aiutato in modo +1 e Grazie ... – RajeshKdev

+0

Che dire dell'utilizzo di WorkSheet.Dimensions.Rows? – MGE

1

sto lavorando con la versione 4.1 e sembra che hanno aggiunto alcune proprietà (di cui commenti da risposte precedenti) per rendere questo Più facile.

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