IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

NPOI et fichier xlsx avec cellules fusionnées [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Points : 67
    Points
    67
    Par défaut NPOI et fichier xlsx avec cellules fusionnées
    Bonjour,

    Dans le cadre de mon projet, j'accède à un fichier xlsx.
    Je dois parcourir la première colonne pour chercher la bonne "référence" une fois cela fait je peux extraire les données de la ligne en question, or ce fichier est bourré de cellules fusionnées.
    Je me retrouve donc avec des lignes ou il manque des données, je ne sais pas comment aborder se problème pour de-fusionner automatiquement les cellules concernées et remettre la données dans chacune de ces cellules.
    Est ce que c'est viable de passer du temps là dessus où il faut que je m'arrange avec l'utilisateur pour qu'il reformate le fichier lui même ?



    J'ai cherché sur le forum je n'ai rien trouvé mis à part une macro sans explication...

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    C'est un peu flou.
    J'ai compris que lisait la première colonne de chaque ligne pour trouver une référence. J'ai bon jusque là ?

    une fois cela fait je peux extraire les données de la ligne en question, or ce fichier est bourré de cellules fusionnées.
    Je me retrouve donc avec des lignes ou il manque des données, je ne sais pas comment aborder se problème pour de-fusionner automatiquement les cellules concernées et remettre la données dans chacune de ces cellules.
    C'est à partir de là que ça devient flou.
    Tu lit une ligne pour la remettre après ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Bonjour Popo

    Alors oui pour le début tu as bon

    En fait il s'agit d'un fichier Excel seulement beaucoup de cellules sont fusionnées.
    Imagines que je trouve la bonne ligne grâce à la première colonne. Ensuite j'ai besoin de certaines données sur la ligne, or il peut y avoir des données qui ne figurent par sur la ligne, mais sur la cellule de la ligne du dessus, car elle était fusionné(Donc la première cellule de la fusion contient la donnée ,les autres rien du tout).

    J'ai essayé de faire une macro sur mon (.xls) donc il passe en (.xlsm) or je peux pas le reconvertir ensuite en (xlsx) pour être exploité par mon programme...

    Je suis un peu perdu, mais je ne baisse pas les bras.

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par LecGaël Voir le message
    Ensuite j'ai besoin de certaines données sur la ligne, or il peut y avoir des données qui ne figurent par sur la ligne, mais sur la cellule de la ligne du dessus, car elle était fusionné.
    Tout est dit, en voulant expliquer la situation tu as écrit la solution.
    C'est à dire lire la valeur dans la cellule à l'intersection de la ligne que tu as trouvé et de la colonne qui t'intéresse. Et si c'est valeur est vide alors lire la valeur de la ligne du dessus et répéter cette opération tant que tu ne trouve pas de valeur.

    Un cas qui pourrait poser problème est celui où il n'y a pas de valeur dans la cellule fusionnée.
    Je ne connais pas NPOI mais j'imagine qu'il est basé sur OpenXML (et Open XML te fournit l'information sur la fusion de cellule).
    Tu dois donc avoir un moyen de récupérer la première ligne de tes cellule fusionnées et de t'arrêter si tu n'as toujours pas trouvé de valeur sur cette ligne et la colonne qui t'intéresse.

    En fouinant un peu j'ai pu trouver ceci :
    https://coderanch.com/t/599485/java/...to-list-Merged

    C'est du Java mais si l'auteur a bien fait les choses ça devrait s'utiliser pareil/
    Il faut donc compter le nombre de région fusionnée avec workbook.getSheetAt(sheetIndex).getNumMergedRegions();
    Puis récupérer chacune des région avec workbook.getSheetAt(sheetIndex).getMergedRegion(i)
    Tu peux les stocker en mémoires pour éviter de refaire l'opération.
    Et ensuite, ces régions devrait avoir les informations de où elle commencent et où elle s'arrêtent.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 173
    Points : 67
    Points
    67
    Par défaut
    Merci je vais creuser de ce côté là

    Autre petit soucis, dans mon application j'essayes de faire une zone de texte ou j'écris où les données ne correspondent pas.
    Seulement mon Texbox affiche la dernière info qu'il lui à été donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     if ( tmp  != mes)
                        {
                            textBox6.Text = "Problème à la ligne 3 colonne " + x + "\r\n";
                            erreur = 1;
     
                        }
                    }
                    foreach (string x in Ligne4)
                    {
                        int number = int.Parse(x);
                        string tmp = feuilleVersion.GetRow(4).GetCell(number).StringCellValue;
                        tmp = tmp.Replace(" OK", "");
                        tmp = tmp.Replace("_OK", "");
                        tmp = tmp.Replace(" FALSE", "");
                        tmp = tmp.Replace("_False", "");
                        tmp = tmp.Replace("0", "");
                        tmp = tmp.Replace(".", "");
                        if (tmp != crv1)
                        {
                            textBox6.Text ="Problème à la ligne 4 colonne " + x + "\r\n"; erreur = 1;
                        }


    EDIT: C'est bon j'ai trouvé, je me sens un peu bête, il fallait juste écrire TextBox.Text = TextBox.Test + "string en plus"

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    Il n'y a pas tout le code mais je pense que le fond du problème est qu'à chaque tour de boucle tu écrases le contenu à afficher (textBox6.Text = "..."). Il faut que tu accumules les chaînes de messages dans un conteneur (au choix une List<string> ou un StringBuilder) et que tu ne les affiches qu'à la fin du traitement. À noter que si le traitement en question s'effectue sur le Thread de l'interface graphique il n'y aura pas d'affichage en temps réel des messages, car la mise à jour de l'interface ne sera à nouveau appelée que lorsque tu lui rendra la, à la fin du traitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2012] SSIS- Import fichier Excel avec cellules fusionnées
    Par tasnimen dans le forum SSIS
    Réponses: 10
    Dernier message: 21/10/2016, 12h48
  2. [AC-2010] Importer un fichier excel avec cellules fusionnées
    Par totor92290 dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/01/2015, 14h51
  3. [ODS] Import Fichier Excel avec cellules fusionnées
    Par Keddy dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 24/10/2014, 21h37
  4. Création de fichiers .XLSX avec Apache POI
    Par Geoffrey49000 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 22/07/2011, 16h55
  5. [AC-2007] Import d'un fichier Excel avec cellules vides
    Par enkoder dans le forum Access
    Réponses: 7
    Dernier message: 10/09/2010, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo