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 :

Sauvegarde d'un fichier Excel au format txt


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 23
    Points
    23
    Par défaut Sauvegarde d'un fichier Excel au format txt
    Je cherche à transformer un fichier Excel (valeurs numériques)

    - en un fichier texte sous C++ Borland
    - avec un point comme séparateur décimal
    - et des espace entre les colonnes.

    J'ai trouvé quelques informations fort utiles chez "developpez.com", mais pas tout ce qui m'est nécessaire.
    Voici ce que j'ai récupéré:
    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
        Variant vMSExcel, vFileName, vXLWorkbooks, vXLWorkbook;
        //Ouverture d'une nouvelle instance
        vMSExcel = Variant::CreateObject("Excel.Application");
        vMSExcel.OlePropertySet("Visible", false);  // Application npn visible par l'utilisateur
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    
       // Modifie le séparateur décimal
        //La première ligne permet de spécifier la valeur que l'on veut pour nouveau séparateur décimal.                Mais comment choisir le point ?
        vMSExcel.OlePropertySet("DecimalSeparator", vText); 
        //La seconde ligne désactive l'utilisation des séparateurs systèmes.
        vMSExcel.OlePropertySet("UseSystemSeparators", false);
     
        //Ouverture d'un classeur existant
        vFileName = "C:\\toto.xls";
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
        vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName);
    
    // c'est là que je ne sais plus faire
    
    //
        //vFileName = "C:\\toto.txt";
        //vXLWorkbook.OleProcedure("Saveas", vFileName);
    
        vMSExcel.OleFunction("Quit"); // on ferme
        vMSExcel = Unassigned;
    Quelqu'un peut-il m'aider à terminer cette fonction ?

    Merci par avance

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Lalanne:
    Pour sauvegarder un fichier xls sous un autre format il ne suffit pas de changer l'extension car cela provoque une erreur il faut donc utiliser la fonction "sauvegarder sous" complete
    Le code pour utiliser cette fonction complete
    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
     
    //FileFormat = 6; // fichier CSV (extension .csv)
    //FileFormat = -4158; //fichier TXT et separateur tabulation (extension .txt)
    FileFormat = 36; //fichier TXT et separateur espace (extension .prn)
    //FileFormat = -4143; // valeur de xlNormal "sauvegarde sous format classeur excel"
                        // pour les autres format de sauvegarde faire un essai avec VBE
    // creation d'un mot de passe protegeant l'ouverture du fichier
    Mot_passe = Unassigned; //"jpb"; // pour la protection du fichier
    Password = Unassigned; //Mot_passe; // mot de passe pour proteger le fichier
    WriteResPassword = Unassigned; //Mot_passe; // confirmation du mot de passe
    ReadOnlyRecommended = false; // fichier en lecture seule (False True Unassigned)
    // creation d'une copie si le fichier existe deja
    CreateBackup = false;  //Unassigned; // creation d'une copie (False True Unassigned)
    // fermeture d'un fichier (ouvert au format csv) au format xls
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\essais.prn";
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup);
    Pense a utiliser les balises de code # et ecrit ton code entre ces balises ce sera plus lisible

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par blondelle
    Salut Lalanne:
    Pour sauvegarder un fichier xls sous un autre format il ne suffit pas de changer l'extension car cela provoque une erreur il faut donc utiliser la fonction "sauvegarder sous" complete
    Le code pour utiliser cette fonction complete
    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
     
    //FileFormat = 6; // fichier CSV (extension .csv)
    //FileFormat = -4158; //fichier TXT et separateur tabulation (extension .txt)
    FileFormat = 36; //fichier TXT et separateur espace (extension .prn)
    //FileFormat = -4143; // valeur de xlNormal "sauvegarde sous format classeur excel"
                        // pour les autres format de sauvegarde faire un essai avec VBE
    // creation d'un mot de passe protegeant l'ouverture du fichier
    Mot_passe = Unassigned; //"jpb"; // pour la protection du fichier
    Password = Unassigned; //Mot_passe; // mot de passe pour proteger le fichier
    WriteResPassword = Unassigned; //Mot_passe; // confirmation du mot de passe
    ReadOnlyRecommended = false; // fichier en lecture seule (False True Unassigned)
    // creation d'une copie si le fichier existe deja
    CreateBackup = false;  //Unassigned; // creation d'une copie (False True Unassigned)
    // fermeture d'un fichier (ouvert au format csv) au format xls
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\essais.prn";
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup);
    Pense a utiliser les balises de code # et ecrit ton code entre ces balises ce sera plus lisible

    Bonjour,

    Merci pour cette réponse rapide . Excuse moi pour les balises. Je n'ai pas l'habitude.
    Cela fonctionne très bien. Ma seule question restante: Puis-je éviter après la sauvegarde au format txt ou prn l'affichage de la boite demandant "Voulez-vous enregistrer les modifications apportées au classeur "toto" ?" (de façon à ce que l'opération soit complètement transparente pour l'utilisateur).

    Merci encore

    Lalanne

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Lalanne a ecrit:
    Puis-je éviter après la sauvegarde au format txt ou prn l'affichage de la boite demandant "Voulez-vous enregistrer les modifications apportées au classeur "toto" ?" (de façon à ce que l'opération soit complètement transparente pour l'utilisateur).
    C'est possible a condition que le fichier n'a pas deja ete cree.
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorkbook.OleProcedure("Close", false);
    Puis tu ferme Excel
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // fermeture d'excel
    vMSExcel.OleFunction("Quit");
    // liberation memoire
    vMSExcel = Unassigned;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par blondelle
    Lalanne a ecrit:

    C'est possible a condition que le fichier n'a pas deja ete cree.
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorkbook.OleProcedure("Close", false);
    Puis tu ferme Excel
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // fermeture d'excel
    vMSExcel.OleFunction("Quit");
    // liberation memoire
    vMSExcel = Unassigned;

    Super. Merci pour tout.

    Lalanne

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Lalanne
    Super. Merci pour tout.

    Lalanne
    Salut,

    En cas de fichier déjà existant lors de la sauvegarde, est-il possible de gérer une réponse "Non" ou "Annuler" (sinon, ça plante)?

    Merci

    Lalanne

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Lalanne:
    La solution que j'avais adoptee ete de tester si le fichier existe si oui de le detruire puis de sauvegarder, au lieu de le detruire tu peu le renommer.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    La je viens de refaire l'essai, si le fichier existe tu a une boite de dialogue qui te demande si tu sauvegarde oui/non ou si tu annule.
    Si tu ne veu pas cette boite de dialogue alors il n'y a que la solution de mon post precedent, detruire le fichier s'il existe, puis tu execute la sauvegarde.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par blondelle
    La je viens de refaire l'essai, si le fichier existe tu a une boite de dialogue qui te demande si tu sauvegarde oui/non ou si tu annule.
    Si tu ne veu pas cette boite de dialogue alors il n'y a que la solution de mon post precedent, detruire le fichier s'il existe, puis tu execute la sauvegarde.

    C'est bon.

    Merci encore

    Lalanne

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2007, 18h31
  2. Recuperer chemin de sauvegarde d'un fichier excel
    Par Tierisa dans le forum Access
    Réponses: 2
    Dernier message: 16/10/2006, 12h57
  3. Réponses: 2
    Dernier message: 07/09/2006, 12h41
  4. sauvegarde d'un fichier excel csv sous le format xls
    Par blondelle dans le forum C++Builder
    Réponses: 5
    Dernier message: 01/08/2006, 11h30
  5. lire / écrire dans un fichier excel au format xml
    Par crisflo dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 28/01/2006, 10h50

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