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 :

Alignement vertical dans Excel avec OLE


Sujet :

C++Builder

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut Alignement vertical dans Excel avec OLE
    J'essaie de définir l'alignement vertical de cellules dans Excel en utilisant OLE mais j'ai toujours une exception... Je ne comprends pas d'où vient l'erreur

    Mon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //---------------------------------------------------------------------------
    void CExcelCell::SetVAlign(XlVAlign alignement) {
     
      try {
        FCell.OlePropertySet("VerticalAlignment", alignement);
      }
      catch (EOleError &er) {
      }
     
    }
    J'utilise les constantes définies dans "excel_xp.h" et j'ai vérifié qu'elles correspondent à l'aide VBA d'Excel.

    J'arrive à définir la couleur de la même référence FCell (un Variant) avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      FCell.OlePropertyGet("Interior").OlePropertySet("Color",(int)color);
    Ce n'est donc pas lié au variant...

    Avez-vous une idée?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    je viens d'essayer avec xlCenter (-4108) et je n'ai pas eu de soucis.

    Eric

  3. #3
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    J'ai testé aussi avec

    xlBottom
    xlCenter
    xlJustify
    xlDistributed

    aucun soucis non plus.

    Peux tu mettre un message dans ton exception pour voir ?
    est ce que c'est possible que ça vienne de ton fichier de test ?

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    J'ai refait un test avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CExcelCell::SetVAlign(XlVAlign alignement) {
     
      try {
        FCell.OlePropertyGet("Interior").OlePropertySet("Color",(int)clYellow);
        FCell.OlePropertySet("VerticalAlignment", alignement);
      }
      catch (EOleError &er) {
        AnsiString result=er.Message;
      }
     
    }
    La cellule est bien devenue jaune mais j'ai toujours une erreur, même en remplaçant directement la valeur d'alignement par -4108...

    Le message de l'exception est très parlant: "Exception Occurred"

    Peut-être que je n'ai pas les bons includes? Pour la partie OLE, j'utilise ceux-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <system.hpp>   // Must be declared before <utilcls.h>
    #include <utilcls.h>
    #include <Graphics.hpp>   // For TColor
    Lesquels utilisez-vous?

  5. #5
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    juste

    pour les constantes...

  6. #6
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    voici le code entier du cpp que j'ai utilisé pour tester sur la fiche vierge d'une application vierge aucun autre include n'a été ajouté au .h)

    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
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    #include "Excel_xp.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            Variant vMSExcel,vXLWorkbooks,vXLWorkbook,vWorksheet,vCell,vRow;
            vMSExcel = Variant::CreateObject("Excel.Application");
            vMSExcel.OlePropertySet("DisplayAlerts", false);
            vMSExcel.OlePropertySet("ScreenUpdating", false);
            vMSExcel.OlePropertySet("Visible", true);
            vMSExcel.OlePropertySet("Interactive", false);
            vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
            vXLWorkbook = vXLWorkbooks.OleFunction("Add");
            Variant vWsPos = 1;  //premiere feuille par defaut
            vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", vWsPos);
            try{
               vCell = vWorksheet.OlePropertyGet("Evaluate","A5");
               vCell.OlePropertySet("Value",StringToOleStr("Ligne1\nLigne2"));
               vCell.OlePropertySet("VerticalAlignment",xlDistributed);
               vRow = vWorksheet.OlePropertyGet("Rows",5);
               vRow.OlePropertySet("RowHeight", 60);
            }catch(EOleError &er){
                ShowMessage(er.Message);
            }
            vMSExcel.OlePropertySet("ScreenUpdating", true);
            vMSExcel.OlePropertySet("Interactive", true);
    }
    //---------------------------------------------------------------------------

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Merci beaucoup pour ton exemple qui marche parfaitement chez moi... Il m'a permis de résoudre mon problème et en plus j'ai découvert les fonctions "DisplayAlerts", "ScreenUpdating" et "Interactive"

    Mon problème venait en fait d'un truc très simple: j'utilise le type "XlVAlign" qui est défini dans Excel_xp.h comme paramètre en entrée et il faut que je le cast explicitement en int avant de le transmettre à la fonction OlePropertyGet():

    le code corrigé est donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void CExcelCell::SetVAlign(XlVAlign alignement) {
     
      try {
        FCell.OlePropertySet("VerticalAlignment", (int)alignement);
      }
      catch (EOleError &er) {
      }
     
    }

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

Discussions similaires

  1. Inserer image dans excel avec PHP
    Par hamzito dans le forum Langage
    Réponses: 5
    Dernier message: 12/08/2011, 12h53
  2. Alignement vertical dans un tableau
    Par Aéris22 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 8
    Dernier message: 26/11/2006, 15h46
  3. probleme lancement excel avec Ole
    Par Mihalis dans le forum Delphi
    Réponses: 3
    Dernier message: 27/09/2006, 09h37
  4. [CR8.5][VS2003]Alignement vertical dans un graphe
    Par San Soussy dans le forum SDK
    Réponses: 1
    Dernier message: 05/08/2006, 19h08

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