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++Builder Discussion :

Format des cellules en Ole Excel [FAQ]


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Format des cellules en Ole Excel
    Bonjour à tous

    J'ai un petit souci avec le format des cellules.
    Je suis en train de développer une classe permettant de piloter Excel en ole

    Or actuellement elle ne fonctionne que pour des colonnes de A a Z
    car je joue sur les codes ascii pour incrémenter les colonnes (initialisation a . Or dès que j'arrive a Z, j'ai un souci car ensuite c'est AA.

    j'ai vu dans la faq que l'on pouvais changer le format de définition des cellules (L1C1 ou A1 pour accéder a une cellule) mais je n'ai pas trouver comment faire

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Par défaut
    bonjour,

    Logiquement la FAQ te donnes toutes les réponses pour ce problème.

    Pour changer le mode d'adressage des cellules d'Excel, il faut regarder ici

    Pour accéder à chaque cellule, tu trouveras ton bonheur ici

    Si jamais ces informations ne sont pas suffisantes pour résoudre ton problème, peux-tu essayer d'être plus explicite sur ce que tu n'arrives pas à faire, stp.

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Salut Superstivix, Merci pour tes informations.

    Le lien que tu m'as envoyé, c'est pour changer le mode d'affichage des cellulles et non l'adressage car cela ne fonctionne pas.

    Voilà mon code, j'ai simplifié

    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
     
    void __fastcall TForm1::DemarerClick(TObject *Sender)
    {
            Variant NomFeuille;
            Variant NomCellule;
            Variant Cellule;
            Variant Valeur;
     
            // On Ouvre Excel;
            Excel = Variant::CreateObject("Excel.Application");
     
            // On défini les propriétés de l'instance
            Excel.OlePropertySet("Visible", true);
            Excel.OlePropertySet("Interactive", true);
     
            //Format L1C1
            Excel.OlePropertySet("ReferenceStyle", -4150);
     
            // Format A1
            //Excel.OlePropertySet("ReferenceStyle", 1);
     
     
            // On récupère l'ensemble des classeurs
            Classeurs = Excel.OlePropertyGet("Workbooks");
     
            // On ajoute un classeur
            UnClasseur = Classeurs.OleFunction("Add");
     
     
            // On accède a la feille 1
            NomFeuille = "Feuil1";
     
            Feuille = UnClasseur.OlePropertyGet("Worksheets", NomFeuille);
     
     
            // On écrit dans la première case
            //NomCellule = "A1";
            NomCellule = "L1C1";
            Cellule = Feuille.OlePropertyGet("Range", NomCellule);
     
            Valeur = "Test";
            // On affecte la valeur a la cellule
            Cellule.OlePropertySet("value", Valeur);
     
    }
    Ou les Variants Excel, Classeurs, UnClasseur et Feuille sont déclarer comme variables de la classe.

    Quand je met le mode A1, ca marche, mais pour L1C1, j'ai une erreur.

  4. #4
    Membre expérimenté
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Par défaut
    Pour la méthode d'adressage as-tu essayé ce qui a été utilisé dans ce thread?

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci à toi, ca fonctionne. En fait, j'avais exactement le même problème que vladi (auteur du post auquel tu m'a renvoyé).

    Je sais pas comment je me suis débrouillé quand j'ai fait une recherche sur le forum car je ne l'ai pas trouvé.

    Encore Merci


    PS : tu ne pourrais pas rajouter cette méthode dans la FAQ, cela pourrais être utilie pour d'autres personnes qui voudrais utiliser ce type d'adressage.

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    J'ai tout de même un petit souci

    Pour moi, le numéro de la ligne et de la colonne sont dans des variables et quand j'appelle ta fonction avec mes variables, cela plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cellule = Feuille.Exec(PropertyGet("Cells") << Ligne << Colonne);
    Ou Ligne et Colonne sont des int
    Est ce qu'il ne faut pas les convertir en Variant ?

  7. #7
    Membre expérimenté
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Par défaut
    Citation Envoyé par kurul1
    PS : tu ne pourrais pas rajouter cette méthode dans la FAQ, cela pourrais être utilie pour d'autres personnes qui voudrais utiliser ce type d'adressage.
    Oui je pense que ça va être nécessaire.
    Moi j'ai été obligé de faire tout mon code avec cette méthode Exec car ça ne fonctionnait pas autrement mais je pensais que c'était du à l'install ou à ma config donc j'ai pas cherché plus loin.

    Apparemment, je ne suis pas vraiement le seul dans ce cas donc il faudra penser à adapter la FAQ dans ce sens.

  8. #8
    Membre expérimenté
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Par défaut
    Citation Envoyé par kurul1
    J'ai tout de même un petit souci

    Pour moi, le numéro de la ligne et de la colonne sont dans des variables et quand j'appelle ta fonction avec mes variables, cela plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cellule = Feuille.Exec(PropertyGet("Cells") << Ligne << Colonne);
    Ou Ligne et Colonne sont des int
    Est ce qu'il ne faut pas les convertir en Variant ?
    Non, non pas besoin d'utiliser des Variants, le type int convient très bien

  9. #9
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    je suis un gros nul, j'ai oublié de changer le format des cellules.

    désolé

  10. #10
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    En fait, j'ai toujours un souci que je ne m'explique pas.

    Quand je fais un programme tout simple avec cette solution, il n'y a pas de problème. Par contre dès que je l'intègre dans mon propre programme, j'ai une violation mémoire.

    J'ai donc pensé à une autre solution, permettant de rester en mode A1.

    Il s'agit de générer le nom de la colonne en fonction de l'indice de colonne entière

    par exemple pour une colonne d'indice 35

    on divise 35 par 26 : il y va une fois et il reste 9. On convertit ce nombre en lettre ce qui nous donne I (9ème lettre de l'alphabet).
    ensuite on repart du diviseur et on recommence
    soit 1 / 26 : il y va 0 fois et il reste 1 (convertit en lettre = A)

    On a terminé car le diviseur est 0

    On obtient la colonne de la case qui est AI

    j'espère avoir été clair

    voilà mon code :
    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
     
    // Méthode pour calculer l'indice
    AnsiString TForm1::IndiceColonne(int Colonne)
    {
            int Diviseur;
            int Reste;
            AnsiString Indice;
            char Carac;
     
            do
            {
                    Diviseur = Colonne / 26;
                    Reste = Colonne % 26;
     
                    // Conversion en caractère
                    Carac = Reste + 64;    // Code Ascii du A = 65
     
                    Indice += Carac;
     
                    Colonne = Diviseur;
            }while (Diviseur != 0);
     
            return Indice;
    }
    et la fonction pour inverser la chaine puisque le bit de poit fort est en premier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AnsiString TForm1::InverserAnsiString(AnsiString chaine)
    {
            AnsiString chaineInverser;
     
            for(int i = chaine.Length(); i > 0; i--)
            {
                    chaineInverser += chaine.SubString(i, 1);
            }
     
            return chaineInverser;
    }
    Ensuite pour obtenir l'indice de la colonne il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Colonne = InverserAnsiString(IndiceColonne(Indice));
    il suffit ensuite de concaténer cet indice de colonne à l'indice de ligne et l'on a le nom de notre cellule.

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

Discussions similaires

  1. format des cellules dans EXCEL
    Par toutou2000 dans le forum C#
    Réponses: 2
    Dernier message: 25/03/2009, 16h33
  2. [Pilotage d'Excel]Comment définir les formats des cellules
    Par Masmeta dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/04/2008, 18h34
  3. Contrôle du format des cellules dans Excel
    Par Flashget dans le forum MATLAB
    Réponses: 4
    Dernier message: 20/03/2007, 14h37
  4. types de format des cellules sur Excel
    Par magictom42 dans le forum Access
    Réponses: 3
    Dernier message: 03/01/2007, 15h43
  5. Formater des cellules excel en format nombre
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2006, 14h13

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