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

API, COM et SDKs Delphi Discussion :

Excel: largeur colonne


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut Excel: largeur colonne
    Bonjour à tous,

    J'ai quelques soucis pour changer la largeur d'une colonne. Je suis sous delphi 7 et j'utilise Excel2000.pas.

    J'ai vu sur différents site que le fait de changer la valeur d'une cellule changeait toute la colonne. Du coup je récupère une cellule et je change sa valeur.

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //Création d'un nouveau classeur
    FXlsApplication:=TExcelApplication.Create(nil);
    FWorkbook:=FXlsApplication.Workbooks.Add(xlWBATWorksheet,0);
     
    //Changement de la valeur de la colonne
    Worksheet:=FWorkbook.Worksheets[aWorkSheetName] as  _Worksheet;
    CellName:=IntToStr(index)+'1';
    Worksheet.Range[CellName,CellName].ColumnWidth:=aValue;
    // Worksheet.Range[CellName,CellName].EntireColumn.ColumnWidth:=aValue;

    J'ai eu deux types d'erreurs:
    - Le projet XXX a provoqué une classe d'exception avec le message d'erreur 'Erreur Ole 800A03EC'

    - Impossible de définir la propriété ColumnWidth pour la classe Range

    Merci

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    As-tu une propriété EntireColumn dans ton Range ?
    Je n'utilise Excel qui via le LateBinding, en suivant l'interop décrit par la MSDN ou via FlexCell
    qui permet de modifier un fichier sans avoir Excel d'installer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet.Range[CellName,CellName].EntireColumn.ColumnWidth:=aValue;
    800A03EC
    8 = Failure
    A = Erreur de Type contrôle
    3EC = 1004 = ERROR_INVALID_FLAGS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CellName:=IntToStr(index)+'1';
    C'est assez étrange, une cellule Excel, c'est plutôt A1 ... A255 mais pas un simple chiffre comme 01, 11 ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    Oui j'ai bien une propriété EntireColumn et ColumnWidth dans ExcelRange (=dispinterface):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    property EntireColumn: ExcelRange readonly dispid 246;
    property ColumnWidth: OleVariant dispid 242;
    Pour ce qui est de l'erreur "Ole 800A03EC" ca venait bien d'une erreur de part, j'ai bien changé "IntToStr" pour que CellName soit bien une cellule valide.
    Merci pour ta remarque, par contre, maintenant j'ai bien ma seconde erreur:
    "Impossible de définir la propriété ColumnWidth pour la classe Range" que ce soit l'une ou l'autre ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheet.Range[CellName,CellName].ColumnWidth:=aValue;
    Worksheet.Range[CellName,CellName].EntireColumn.ColumnWidth:=aValue;

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    ColumnWidth s'exprime en nombre de caractère et utilise la taille du caractère de la Font pour calculer le nombre réel de point
    Si tu n'as pas d'objet Font dans ton fichier, cela pourrait poser problème
    As-tu essayé de modifier la colonne d'un fichier existant créer par Excel
    As-tu essayé de modifier le contenu d'une colonne puis d'affecter ColumnWidth

    Width, en lecture seule, te renvoie le nombre calculé
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 31
    Par défaut
    ColumnWidth et Width me retourne bien une valeur (11 et 0 si case vide).

    En créant un fichier à partir d'Excel, ca n'a rien changé j'avais toujours la même erreur en changeant la taille de la colonne. Par contre, si je modifie la valeur de la cellule puis je modifie ColumnWidth ca marche. Mais, Entire.ColumnWidth ne marche pas, ce qui n'est pas gênant car toute ma colonne est modifiée.

    En fait, l'erreur ne vient pas d'une faute d'implémentation mais que la valeur de la colonne que j'attribuais était trop grande. Donc ca marche désormais sans passer par la modification de la cellule avant.

    Merci

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

Discussions similaires

  1. PROC IMPORT Excel Largeur de colonnes
    Par dj-julio dans le forum Débutez
    Réponses: 3
    Dernier message: 08/10/2014, 13h35
  2. Probleme largeur colonne export Excel
    Par samisam91 dans le forum BIRT
    Réponses: 4
    Dernier message: 09/12/2010, 09h59
  3. Réponses: 0
    Dernier message: 29/07/2008, 10h02
  4. [VBA][Excel]Largeur de colonne
    Par Pollux dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 26/01/2006, 16h41
  5. largeur colonne excel après export
    Par scully2501 dans le forum Access
    Réponses: 6
    Dernier message: 18/06/2005, 10h52

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