7
votes

LINQTOEXCEL - Besoin de commencer à une ligne spécifique

J'utilise le bibliothèque LinqtoExcel . Travailler très bien jusqu'à présent, sauf que je dois commencer la requête à une ligne spécifique. En effet, la feuille de calcul Excel du client utilise des images et des "en-tête" en haut du fichier Excel avant que les données ne démarrent réellement.

Les données elles-mêmes seront simples à lire et sont assez génériques, je dois juste savoir comment dire au ExcelqueryFactory pour commencer à une ligne spécifique.

Je suis conscient de la pêche au travail Société> ("B3", "G10") option, mais je ne veux pas spécifier une ligne de fin, n'importe où Démarrer < / em> lire le fichier.

Utilisation du dernier v. de LinqtoExcel avec C #


0 commentaires

5 Réponses :


1
votes

Avez-vous essayé FeatureTerrange ("B3", "G")


1 commentaires

Oui, malheureusement, cela me donne une erreur "EnDrange Argument 'G' est format invalide pour le nom de la cellule"



0
votes

Inunatly, à ce moment-là et à l'itération du cadre LinqtoExcel, il ne semble pas y avoir de moyen de le faire.

Pour contourner cela, nous obligeons que le client ait les données à télécharger. feuille "dans le document Excel. La ligne d'en-tête à la première rangée et les données sous elle. S'ils veulent des "métadonnées", ils devront y inclure dans une autre feuille. Vous trouverez ci-dessous un exemple de Documentation LinqtoExcel sur la façon d'interroger une feuille spécifique. xxx


0 commentaires

4
votes

Je viens d'essayer ce code et il semblait travailler juste bien:

var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Book1.xlsx");

var query =
    from row in book.WorksheetRange("A4", "B16384")
    select new
    {
        Name = row["Name"].Cast<string>(),
        Age = row["Age"].Cast<int>(),
    };


0 commentaires

4
votes

Je suppose que vous avez déjà résolu cela, mais peut-être pour d'autres personnes - on dirait que vous pouvez utiliser xxx

pas aussi simple que spécifiant une plage ("B3", ...), mais aussi la voie. J'espère que cela aide au moins quelqu'un;)


2 commentaires

où vous affectez la variable longueur ?


Eh bien, il serait généralement allrowows.count ou allrowows.count () ou allrowows.length (ne sais pas maintenant, désolé) , si vous voulez lire toutes les lignes. Ou comme substitution à spécifier (non existant) plage ("B3", "G10") Vous devez le calculer. longueur a été utilisé juste à des fins de démontrer. À l'époque, il n'y avait pas de solution simple Afaik ... Bon point, publié précédemment.



2
votes

J'avais essayé cela, fonctionne bien pour mon scénario.

//get the sheets info
        var faceWrksheet = excel.Worksheet(facemechSheetName);
      // get the total rows count.
        int _faceMechRows = faceWrksheet.Count();

      // append with End Range.
  var faceMechResult = excel.WorksheetRange<ExcelFaceMech>("A5", "AS" + _faceMechRows.ToString(), SheetName).
                        Where(i => i.WorkOrder != null).Select(x => x).ToList();


3 commentaires

Je viens de trouver cela très utile mais je voulais souligner que vous devez ajouter la valeur de ligne de départ au nombre d'enregistrements ou que vous manquez ce nombre de lignes à la fin, il devrait donc être int _facemechrows = facewrksheet.count () + 5;


@Davidmolyneux Je ne suis pas sûr de cela était de 2 ans, mais dans mon cas, il s'agissait de sauter des enregistrements d'en-tête.


Salut vous êtes correct, j'ai examiné cela un peu plus, si vous avez des données sur vos lignes de pointe, alors cela fonctionne bien. Si comme moi, ils ne sont que des lignes vierges, ils ne sont pas chargés, et le nombre total de lignes est court par la quantité de lignes vides. Donc, si vous avez 5 lignes vierges et 15 lignes de données (20 rangées totales), le nombre total de lignes est de 15 de sorte que votre gamme irait de la rangée 5 à la rangée 15 manquant les 5 dernières lignes ajoutées dans les lignes sautées vous ramèneront à la Total correct.