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 :

remplir une collection avec les cellules nommées d'un classeurs Excel


Sujet :

C#

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut remplir une collection avec les cellules nommées d'un classeurs Excel
    Bonjour,

    Y a t'il un moyen de remplir une collection ou dictionnaire, grâce à la lecture d'un fichier Excel en récupérèrent toutes les cellules nommées, avec pour la clef le nom de la cellule trouvé, et en données la valeur de la cellule trouvée.

    Autre solution possible, mais cela m'obligerais de créer avant une collection avec la totalité des noms de cellule que je souhaite, puis rechercher le nom de ces cellules nommées dans le classeur et remplir le dictionnaire avec la clef(ce nom) et la lecture de cette cellule.

    C'est un classeur Excel assez lourd avec beaucoup de données, donc peut être long, mais le but est de remplir une BDD (SqlLite) avec ces données (nommées). Puis le reste du temps piocher dans cette BDD. (Le dictionnaire n'est peut être pas utile du coup). Puis effectuer une lecture de ce classeur Excel lors d'une mise à jour.
    J'ai énormément de calcule à faire, utilisant ces données, donc je voudrais ma facilité la tache en cas de modification des données "fixes" de ce fichier Excel.
    Le fichier Excel provenant du client, il pourrait du coups aussi mettre à jours ces données s'il fait des modifications future.

    Je précise que chaque cellules nommées est unique, une seul cellule à chaque fois, il n'y a pas de groupe. Actuellement c'est bien comme cela, mais au cas où, ignorer les champs s'il y en a plusieurs.

    Voila, je vous remercie. Je vais continuer à chercher de mon coté dès demains. Bonne soirée.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    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 780
    Points : 5 537
    Points
    5 537
    Par défaut
    Il existe plusieurs solutions.

    La plus simple est l'interopérabilité Excel (appel d'Excel via COM) mais cela nécessite d'avoir un Excel installé sur la machine.

    Sans Excel, il existe Open la librairie OpenXml (complexe)
    Ou encore ClosedXml (basé sur OpenXml mais la complexité est masquée)

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Bonjour,

    J'ai réussi ce matin en trouvant une aide sur le Net que j'ai un peu adapté.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
            public void UpdateWithExcelFile()
            {
                PathFile = Directory.GetCurrentDirectory() + "\\" + FileName;
                excelApp = new Microsoft.Office.Interop.Excel.Application();
                excelApp.Visible = false;
                myWorkbook = excelApp.Workbooks.Open(PathFile);
                Names wbNames = myWorkbook.Names;
                CellNoms = new Dictionary<string, string>();
                foreach (Name item in wbNames)
                {
                    string a = item.Value.ToString();
                    string s;
                    if (item.Name.Contains("!"))
                    {
                        s = "";
                    }
                    if (a != "=#NAME?" && !a.Contains("#REF"))
                    {
                        char ab = Convert.ToChar(39);
                        char[] tr = { ' ' };
                        string[] cut = a.Split('!');
                        if (cut.Length > 1)
                        {
                            string NameSheet = cut[0];
                            NameSheet = NameSheet.Replace('=', ' ');
                            NameSheet = NameSheet.Replace(ab, ' ').Trim(tr);
                            if (WorkSheetExist(NameSheet))
                            {
                                myWorkSheet = excelApp.Worksheets[NameSheet];
     
                                if (myWorkSheet.Range[item.Name].Value2 != null)
                                {
                                    s = myWorkSheet.Range[item.Name].Value2.ToString();
                                }
                                else
                                {
                                    s = "";
                                }
                                if (item.Name.Contains("!") | item.Name.Contains("'"))
                                {
                                    s = "";
                                }
                                else
                                {
                                    CellNoms.Add(item.Name, s);
                                }
                            }
                        }
                    }
                }
                UpdateBaseSql();
            }
    J'ai fait des filtres un peu barbare, mais cela fonctionne.

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

Discussions similaires

  1. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  2. Remplir une table avec les données d'autres tables
    Par Beltegeuse dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/04/2008, 12h00
  3. [VB.NET 1.1] Remplir une liste avec les couleurs d'un brush
    Par malhivertman1 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/11/2006, 12h23
  4. remplir une table avec les jours du mois
    Par david06600 dans le forum Langage
    Réponses: 6
    Dernier message: 04/08/2006, 10h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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