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

Delphi Discussion :

Pas de gestion de formules lors de l'écriture dans un fichier excel


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut Pas de gestion de formules lors de l'écriture dans un fichier excel
    Bonjour,

    Je travaille sur une appli qui écrit des données dans un fichier excel.
    J'ai un soucis avec les nombres (de type 01, 02...) et les formules (que je ne veux pas gérer, certaines données contiennent un '-' en début de texte, mais je ne veux pas les gérer comme des formules).

    J'ai essayé de mettre les cellules au format texte avant d'écrire dedans (en utilisant NumberFormat := '@'). Mais rien n'y fait, les nombres 01,02 sont imprimés 1, 2 dans excel et tout ce qui commence par '-' ou -=' est pris pour une formule.

  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
    Il y a toujours la solution de mettre une apostrophe en début...

    mais
    peux-tu montrer un morceau de code, ou tu formattes tes cellules, et ou tu mets tes valeurs ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    c'est curieux car en utilisant l'enregistreur de macro (qui donne le code suivant) tout se passe bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Range("A1:D14").Select
        Selection.NumberFormat = "@"
        Range("A1").Select
        ActiveCell = "01"
        Range("A2").Select
        ActiveCell = "02"
    Les 0 ne sautent pas...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    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
    25
    26
    27
    28
     
    vMSExcel := CreateOleObject('Excel.Application');
    vMSExcel.Visible := false;
    vMSExcel.DisplayAlerts := false;
    vXLWorkbooks := vMSExcel.Workbooks;
    vXLWorkbook := vXLWorkbooks.Add;
    vWorksheet := vXLWorkbook.WorkSheets['feuil1'];
    ...
    rowNumber := 1;
    while (not ClientDataset.eof) do
    begin
      // bascule ligne format texte
      vRow := vWorksheet.Rows[IntTostr(row) + ':' + IntToStr(row)];
      vRow.NumberFormat := '@';
      // Creation ligne à copier dans fichier excel
      data := '';
      for j := 0 to FieldCount-1 do
      begin
        data := data +
        Clientdataset.FieldByName(DBfields[j]).AsString)+Chr(9);
      end; 
      // Copie données dans 1ere cellule
      vCell := vWorksheet.Range['A'+IntToStr(RowNumber)];
      vcell.value := data;
      // Bascule toutes les données dans toutes les cellules
      vcell.TextToColumns(vcell, 1, 1, false, true, False, False, false, False);
      inc(RowNumber);
    end;
    L'apostrophe n'est pas masquée, sinon, je peux ajouter un espace en début de la données, mais je voudrais éviter.

  5. #5
    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 me rappelle plus, mais je crois que quelqu'un était déjà tombé sur ce problème, que le formattage '@' ne marchait pas sur son Excel.

    Essaye de faire un test unitaire sur une seule cellule, du style,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WS.Cells.Item[ 2, 3 ].NumberFormat := '@';
    WS.Cells.Item[ 2, 3 ].Value := '0123';
    est-ce que le '0' est bien gardé après execution de ce code ?

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Et en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WS.Cells.Item[ 2, 3 ].NumberFormat := '@';
    WS.Cells.Item[ 2, 3 ].Value := '"0123"';

  7. #7
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    C'est bizarre, chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XlApp := CreateOleObject('Excel.Application');
    xlApp.Cells[1,1]..NumberFormat := '@';
    XlApp.Cells.[1,1].Value := '-0123';
    donne le résultat escompté.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    C'est peut être la commande vcell.TextToColumns(vcell, 1, 1, false, true, False, False, false, False); qui fout la zone.

    Je vais essayer lundi

    Bon week end

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 287
    Points : 91
    Points
    91
    Par défaut
    C'est bien ça, si je ne fais pas la commande TextToColumns, ça fonctionne

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

Discussions similaires

  1. OutOfMemory lors de l'écriture dans un fichier
    Par Mischka dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 13/11/2007, 13h06
  2. Blocage lors de l'écriture dans un fichier
    Par yoyostras dans le forum Débuter
    Réponses: 7
    Dernier message: 26/06/2007, 15h16
  3. Problème lors de l'écriture dans un fichier.
    Par captainflex dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 16/05/2007, 13h42
  4. Erreur E/S 32 lors de l'écriture dans un fichier text.
    Par yosthegost dans le forum Delphi
    Réponses: 6
    Dernier message: 01/06/2006, 11h45
  5. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25

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