web-dev-qa-db-fra.com

Lecture à partir d'un fichier Excel à l'aide de ClosedXML

Mon fichier Excel n'est pas dans des données tabulaires. J'essaie de lire à partir d'un fichier Excel. J'ai des sections dans mon fichier Excel qui sont tabulaires.

Je dois parcourir les lignes 3 à 20 qui sont tabulaires et lire les données.

Voici partie de mon code:

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

Comment parcourir les lignes 3 à 20 et lire les colonnes 3,4, 6, 7, 8? De plus, si une ligne est vide, comment puis-je la déterminer afin de pouvoir la sauter sans lire que chaque colonne a une valeur pour une ligne donnée.

22
Nate Pet

Pour accéder à une ligne:

var row = ws1.Row(3);

Pour vérifier si la ligne est vide:

bool empty = row.IsEmpty();

Pour accéder à une cellule (colonne) dans une ligne:

var cell = row.Cell(3);

Pour obtenir la valeur d'une cellule:

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

Pour plus d'informations, consultez la documentation .

27
Raidri

Je préfère utiliser la méthode RowsUsed() pour obtenir une liste des seules lignes non vides ou modifiées par l'utilisateur. De cette façon, je peux éviter de faire des vérifications pour chaque ligne, qu'elle soit vide ou non.

Je ne sais pas si cela correspondra à l'énoncé du problème exact que vous avez décrit dans votre article, mais cet extrait de code peut vous aider à traiter les numéros de la 3e à la 20e ligne de toutes les lignes non vides car j'ai filtré le vide lignes avant de commencer le traitement. Le filtrage des lignes non vides avant de commencer le traitement peut affecter les numéros de ligne que vous souhaitez réellement traiter.

Mais je pense que la méthode RowsUsed() est très utile dans tout scénario général lorsque vous traitez les lignes d'une feuille 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;
       }
    }
}
7
RBT

Voici ma confiture.

var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row
foreach (var row in rows)
{
    var rowNumber = row.RowNumber();
    // Process the row
}

Si vous utilisez simplement .RowsUsed(), votre plage contiendra un grand nombre de colonnes. Bien plus que ce qui est réellement rempli!

Utilisez donc d'abord .RangeUsed() pour limiter la plage. Cela vous aidera à traiter le fichier plus rapidement!

Vous pouvez également utiliser .Skip(1) pour sauter la ligne d'en-tête de colonne (si vous en avez une).

6
Jess