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] Forcer le format en texte


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [Excel] Forcer le format en texte
    Bonjour,

    Je crée un fichier xsl et j'écrit dans les cellules de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      for i := index to index+5 do begin
        for j := 1 to 4 do begin
          MaFeuille.Cells.Item[i,j].Value := String('0'+IntToStr(i)+IntToStr(j));
        end;
      end;
    Seulement, il me formate le texte en numérique alors que je ne le veux pas.

    Je veux qu'il me le force en texte: "01245" (pour des codes postaux par exemple).

    Comment faire ?
    David.

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Je crois qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      for i := index to index+5 do begin
        for j := 1 to 4 do begin
          MaFeuille.Cells.Item[i,j].NumberFormat := '@';
          MaFeuille.Cells.Item[i,j].Value := String('0'+IntToStr(i)+IntToStr(j));
        end;
      end;
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour TicTacToe,

    Merci pour ta réponse mais ça ne change rien.

    Si tu sais comment changer le format de toute une colone d'un coup, c'est encore mieux.
    David.

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    ah ? moi je l'utilise et ca fonctionne correctement.

    Attention, il faut définir le format de la cellule avant de la remplir a priori.

    Quant a toute une colonne d'un coup, c'est la même chose mais avec un range sur une colonne ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaFeuille.Cells.Item[ ICol, 1 ].EntireColumn.NumberFormat := '@';
    --> MaFeuille.Cells.Item[ ICol, 3 ].Value := '00123'; // devrait fonctionner et laisser les 0 puisque formatée en chaine
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    En faisant précéder la valeur d'une quote, Excel sait que la valeur est en texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaFeuille.Cells.Item[i,j].Value := '''' + String('0'+IntToStr(i)+IntToStr(j));

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    pour qu'ecxel considere le champs comme texte tu peut le forcer en mettant un apostrophe ' au devant ta valeur

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    J'avais pensé à la cote, mais le pb, sur de nombreuse versions d'excel,

    la cote reste mais est bien prise en compte.
    Il suffit juste d'editer la cellule sans la modifier et de la revalider et la cote disparait bien... bug d'excel ?

    Mais en tout cas, ce n'est pas forcément joli à l'affichage et cela déroute l'utilisateur.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour à tous,

    J'avais essayé la quote, la cellule est bien en texte mais c'est vrai que ce n'est pas propre, il y a des restes.

    C'est bien ça que tu me dit de faire ?
    MaFeuille.Cells.Item[i,j].Value := '''0'+IntToStr(i)+IntToStr(j);
    MaFeuille.Cells.Item[i,j].Value := '0'+IntToStr(i)+IntToStr(j);

    (edit, update ou validate ne marchent pas, j'ai essayé)

    Le resultat est le même...
    David.

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Heu, je ne sais pas à qui tu parles

    sinon, pour les cotes c'est pas moi.
    Je faisais juste la remarque que dans Excel, une fois la cellule alimentée par ton prog, la cote reste, et qu'en editant/validant (toujours dans excel), la cote disparait bien à l'affichage.
    --> pour ca que je n'avais pas proposée cette solution.

    Sinon, avec le numberformat = '@' ca ne marche toujours pas, par rapport à mon ancien post le citant?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Citation Envoyé par TicTacToe
    ah ? moi je l'utilise et ca fonctionne correctement.
    MaFeuille.Cells.Item[ ICol, 1 ].EntireColumn.NumberFormat := '@';
    --> MaFeuille.Cells.Item[ ICol, 3 ].Value := '00123'; // devrait fonctionner et laisser les 0 puisque formatée en chaine
    Ne marche pas chez moi, je fais exactement ça: (j'ai excel 2002 sp1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      for i := index to index+5 do begin
        for j := 1 to 4 do begin
          MaFeuille.Cells.Item[i,j].EntireColumn.NumberFormat := '@';
          MaFeuille.Cells.Item[i,j].Value := '00123';
        end;
      end;
    Mais ta solution d'éditer et de revalider, je n'ai pu l'essayer car je ne connais pas les fonctions...
    Peux tu me mettre un exemple ?
    David.

  11. #11
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    La solution ne serait-elle pas de mettre la valeur numérique i*100 + j, avec un format de cellule 00000 ?

  12. #12
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    dans ton code, le numberformat n'est pas à intégrer dans la boucle puisqu'il fait une colonne entière, mais bon, le problème n'est pas là, cela fait juste perdre du temps.

    Alors c'est vrai qu'en fait, les cas ou j'ai utilisé NumberFormat := '@', derrière je n'alimentais pas mes cellule avec Cell[x,y].value := '123'

    mais en collant du presse-papier des valeurs (plus rapide, d'ailleurs je te le conseille dans ton cas).
    L'alimentation est surement différentes vis-à-vis de Excel entre : effectuer un .value et un .paste

    Je ferai un test avec un .Value pour voir cet aprem.
    sinon, je le fais sur un Excel 2003...


    Nota:
    Mais ta solution d'éditer et de revalider, je n'ai pu l'essayer car je ne connais pas les fonctions...
    Peux tu me mettre un exemple ?
    Non je ne peux pas, j'ai bien précisé que cela n'était pas fait par prog, mais par l'utilisateur dans Excel.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  13. #13
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    cmen76: Ta solution ne me convient pas car la longueur des chaines n'est pas toujours la même (je sais, je n'y met pas du mien, hi).
    David.

  14. #14
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    comme prévu, ceci fonctionne parfaitement sur mon Excel 2003:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonWorkSheet.Cells.Item[ 2, 3 ].NumberFormat := '@';
    MonWorkSheet.Cells.Item[ 2, 3 ].Value := '0123';
    La cellule est bien '0123' et considérée comme texte (cadrage gauche par défaut).
    En regardant les propriétés de la cellules, de surcroit, elle est bien estampillée de type 'Texte' sous Excel.
    Aucun affichage résiduel comme l'apostrophe.

    Donc je ne comprends pas pourquoi ca ne marcherait pas chez toi, à moins que ce soit dû à la version d'Excel.

    Précisions:
    j'utilise, TExcelApplication, TExcelWorkBook, TExcelWorkSheet pour manipuler Excel.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  15. #15
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Moi, je l'utilise comme la faq:
    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
    var MonClasseur: _workbook;
      MaFeuille :_Worksheet;
      i,j,index: Integer;
    Begin
      MonClasseur := ExcelApplication1.Workbooks.Open('classeur1.xls',...);
     
      MaFeuille := MonClasseur.Worksheets[1] as _worksheet;
      MaFeuille.Rows.Clear;
      index := 1;
      while VarToStr(MaFeuille.Cells.Item[index,1].Value)<>'' do
        index := index+1;
     
      for i := index to index+5 do begin
        for j := 1 to 4 do begin
          MaFeuille.Cells.Item[i,j].NumberFormat := '@';
          MaFeuille.Cells.Item[i,j].Value := '00123';
        end;
      end;
     
      MonClasseur.Save(0);
      MonClasseur.Close(False,emptyparam,emptyparam,0);
    Crois-tu que _workbook et TExcelWorkBook diffèrent ?
    David.

  16. #16
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    je vais tester ton code...
    que mets tu dans la clause uses pour que le type '_workbook' soit reconnu ?

    ce type n'est pas reconnu par défaut...

    uniquement pour gagner du temps...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  17. #17
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Heu...

    Bin voici la liste:
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls, ComCtrls, ShellApi,
    Menus, ComTimeStamp, ComObj, OleServer, ExcelXP ;

    Essaye ComCtrls à tout hazard, ça me parle.
    David.

  18. #18
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    ok pour les uses
    peux tu donner le code entier, d'ouverture d'excel, d'ouverture du workbook...

    Comme je ne le fais pas de la même manière, j'ai la flemme de faire des recherches pour l'ouvrir à ta manière.

    Le but étant de tester exactement ton code avec ma version d'excel.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  19. #19
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    En fait, tout est dans le dernier post de la page 1 !
    (tu m'inquiètes, il manque quelque chose ?)
    David.

  20. #20
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    me suis absenté...

    j'ai testé ce 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    var
      MaFeuille :_Worksheet;
      MonClasseur: _workbook;
    procedure TFxxxG.Button1Click(Sender: TObject);
    var
      i,j,index: Integer;
    Begin
      MonClasseur := ExcelApplication1.Workbooks.Open('c:\classeur1.xls', EmptyParam,
                     EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                     EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0  );
     
     
      MaFeuille := MonClasseur.Worksheets[1] as _worksheet;
      MaFeuille.Rows.Clear;
     
      ExcelApplication1.Visible[ 0 ] := True;
     
          MaFeuille.Cells.Item[2,3].NumberFormat := '@';
          MaFeuille.Cells.Item[2,3].Value := '00123';
     
      (*
      index := 1;
      while VarToStr(MaFeuille.Cells.Item[index,1].Value)<>'' do
        index := index+1;
     
      for i := index to index+5 do begin
        for j := 1 to 4 do begin
          MaFeuille.Cells.Item[i,j].NumberFormat := '@';
          MaFeuille.Cells.Item[i,j].Value := '00123';
        end;
      end;
     
      *)
    end;
     
    procedure TFxxxG.Button2Click(Sender: TObject);
    begin
      MonClasseur.Save(0);
      MonClasseur.Close(False,emptyparam,emptyparam,0);
    end;
    Cela fonctionne parfaitement
    * et en visu sans avoir sauvé
    * et après avoir sauvé, en rouvrant le document...

    donc... je ne sais pas quoi te dire si ce n'est la version d'Excel...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Forcer la saisie de texte dans cellule excel
    Par idva5492 dans le forum Excel
    Réponses: 4
    Dernier message: 15/06/2015, 10h32
  2. [PROC] Forcer un format pour import fichier Excel
    Par clao260 dans le forum SAS Base
    Réponses: 3
    Dernier message: 29/08/2013, 13h57
  3. [Excel] Forcer le format de la cellule en php
    Par masseur dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/07/2007, 15h35
  4. [Excel] Formater du texte en nombre
    Par Isa31 dans le forum Excel
    Réponses: 4
    Dernier message: 02/03/2006, 15h48
  5. Envoi de mail au format Rich-Text
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 29/10/2003, 16h27

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