2015-04-15 27 views
17

Mój plik Excel nie ma danych tabelarycznych. Próbuję odczytać z pliku programu Excel. Mam sekcje w ramach mojego pliku Excela, które są tabelaryczne.Czytanie z pliku Excel przy użyciu ClosedXML

Muszę przechodzić między wierszami od 3 do 20, które są tabelaryczne i odczytują dane.

Oto strona mojego kodu:

 string fileName = "C:\\Folder1\\Prev.xlsx"; 
    var workbook = new XLWorkbook(fileName); 
    var ws1 = workbook.Worksheet(1); 

jaki sposób pętli wierszy 3 do 20 i odczytać kolumny 3,4, 6, 7, 8? Również, jeśli wiersz jest pusty, jak to ustalić, aby można było pominąć go bez czytania, że ​​każda kolumna ma wartość dla danego wiersza.

Odpowiedz

20

Aby uzyskać dostęp wiersz:

var row = ws1.Row(3); 

Aby sprawdzić, czy rząd jest pusta:

bool empty = row.IsEmpty(); 

Aby uzyskać dostęp do komórki (kolumna) z rzędu:

var cell = row.Cell(3); 

Do pobierz wartość z komórki:

object value = cell.Value; 
// or 
string value = cell.GetValue<string>(); 

Aby uzyskać więcej informacji, patrz documentation.

+0

Czy znasz sposób dostępu do stylów komórek i zastosowania jako style HTML? – xwpdev

+0

To kolejne pytanie (które powinieneś stworzyć). Możesz uzyskać dostęp do stylów z 'cell.Style ....' ale nie możesz automatycznie przekonwertować ich na style HTML lub CSS o ile wiem. Musiałbyś sam napisać konwerter. – Raidri

+0

Czy możesz mi powiedzieć, jak wziąć wartość komórki za pomocą nazwy pola –

2

Preferuję metodę RowsUsed(), aby uzyskać listę tylko tych wierszy, które nie są puste lub zostały edytowane przez użytkownika. W ten sposób mogę uniknąć sprawdzania każdego wiersza, czy jest pusty, czy nie.

Nie jestem pewien, czy będzie pasować do dokładnego opisu problemu, który opisałeś w swoim poście, ale ten fragment kodu może pomóc ci przetworzyć numery od 3 do 20 wierszy ze wszystkich niepustych wierszy, tak jak ja odfiltrować puste wiersze przed rozpoczęciem przetwarzania. Filtrowanie niepustych wierszy przed rozpoczęciem przetwarzania może mieć wpływ na numery wierszy, które mają zostać przetworzone.

Ale uważam, że metoda RowsUsed() jest bardzo pomocna w każdym ogólnym scenariuszu podczas przetwarzania wierszy arkusza programu Excel.

string fileName = "C:\\Folder1\\Prev.xlsx"; 
using (var excelWorkbook = new XLWorkbook(fileName)) 
{ 
    var nonEmptyDataRows = excelWorkbook.Worksheet(1).RowsUsed(); 

    foreach (var dataRow in nonEmptyDataRows) 
    { 
     //for row number check 
     if(dataRow.RowNumber() >=3 && dataRow.RowNumber() <= 20) 
     { 
      //to get column # 3's data 
      var cell = dataRow.Cell(3).Value; 
     } 
    } 
} 
Powiązane problemy