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 :

passer .xls à .csv


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut passer .xls à .csv
    Bonjour

    Je tente de transformer un fichier .xls en un fichier .csv. Pour cela j'ouvre Excel et demande à enregistrer le fichier en csv

    Voici 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
    29
    30
    31
    32
     
    Variant vMSExcel;
    Variant vWorksheet, vSheetName;
    Variant  vXLWorkbooks, vXLWorkbook, vReadOnly, vLink;
     
    void __fastcall TForm1::CreerCSV()
    {
        AnsiString Path = ExtractFileDir(ParamStr(0));
        AnsiString FileName = Path +"\\~Courbes.xls";
     
        vMSExcel = Variant::GetActiveObject("Excel.Application");
        vMSExcel.OlePropertySet("Visible", false);
     
        //Ouvre Excel en lecture seul
        vLink = Unassigned;
        vReadOnly = true;
        vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
        vXLWorkbook = vXLWorkbooks.OleFunction("Open", FileName.c_str(), vLink, vReadOnly);
     
     
        //Placer dans la fiche Liste
        vSheetName = "LISTE";
        vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets",vSheetName);
     
        //Enregistrer au format CSV
        vXLWorkbook.OleProcedure("Saveas", Path+"\\~Courbes.csv");
     
        //Ferme Excel
        vMSExcel.OleFunction("Quit");
        vMSExcel = Unassigned;
     
    }
    Mais je n'arrive pas à tester cette fonction car j'ai l'erreur suivante :
    [C++ Erreur] sysvari.h(1877): E2015 Ambiguïté entre 'TVariantT<tagVARIANT>::operator =(const TVariantT<tagVARIANT> &)' et 'TVariantT<tagVARIANT>::operator =(bool)'.

    Auriez vous une idée pour supprimer cette erreur?
    Est ce que le principe d'obtention du fichier csv est bon?

    merci de votre aide

  2. #2
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Bon j'ai supprimé mes erreurs en utilisant comme ceci les fonctions OLE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", FileName.c_str());
    AnsiString fiche = "LISTE";
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets",fiche.c_str());

    Malheureusement mon programme plante et m'affiche "une exception c'est produite"

  3. #3
    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
    Par défaut
    Salut Masmeta:
    Dans ton programme initial c'est la definition de ton chemin qui n'est pas bonne, il faut bannir les AnsiString,
    ecrit plutot ceci.
    Variant FileName;
    FileName = "C:\\Courbes.xls";
    utilise la meme ecriture pour la sauvegarde

  4. #4
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Salut Blondelle

    A force de lire tous les posts sur Excel, je me demande pas si tu es devenu un pro avec BCB et Excel.

    Bon j'ai essayer en mettant des variants, le compilo me remet cette erreur d'ambiguite. Quand je met directement le chemin, j'ai une boite de dialogue avec ecrit " opération non disponible".

    Je me demande si c'est une bonne solution de passer par excel pour faire ce fichier cvs


    Avec ce message je deviens membre du club

  5. #5
    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
    Par défaut
    La facon d'ouvrir un fichier sur le programme qui me sert actuellement, le code n'est pas nettoye donc certains Variant sont deffinis mais pas utilises dans ce bout de 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
     
    Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vWorksheet;
    Variant vRange, vWorksheets;
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    Variant vFileName, vNotUsed, vSeparator, FileFormat, ReadOnlyRecommended;
    Variant CreateBackup, Password, WriteResPassword;
    Variant Mot_passe;
    // ouverture d'un fichier au format csv
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Classeur1.xls";
    vNotUsed = Unassigned;
    // vSeparator = 1;
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,
    vNotUsed, vNotUsed);
    Avant d'executer ton code met un point d'arret pour executer le code en pas a pas afin de savoir ou se situe l'erreur.
    Noubli pas d'inclure "#include <utilcls.h>"

  6. #6
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Je n'arrive pas à tester ton code car j'ai 4fois l'erreur suivante[C++ Erreur] sysvari.h(1877): E2015 Ambiguïté entre 'TVariantT<tagVARIANT>::operator =(const TVariantT<tagVARIANT> &)' et 'TVariantT<tagVARIANT>::operator =(bool)'.
    pour cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,vNotUsed, vNotUsed);
    Je pense que cela est du au passage de paramètres car si je met un FileName.c_str(), j'ai une erreur en moins

  7. #7
    Membre éclairé Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par défaut
    Au lieu de passer par BCB, je vais essayer de l'enregistrer directement en CVS par le fichier xls en faisant une macro.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut problème identique
    Bonjour,
    J'ai rencontré le même problème sous C++ Builder 4 (alors que cela fonctionne sous C++ Builder 6). J'ai passé du temps à faire un tas d'essais, y compris à bidouiller utilcls.h et sysvari.h mais je n'ai pas réussi à résoudre le problème.
    Quand cela passe à la compilation, cela plante à l'exécution.

    D'ailleurs, un truc que je n'ai pas compris:
    - j'ai lu à divers endroits que l'appel de vXLWorkbook.OleProcedure("SaveAs", "C:\\Projets\\monfichier.xls") plante parce que la fonction attend un Variant en deuxième paramètre.
    - pourtant, l'appel vXLWorkbook = vXLWorkbooks.OleFunction("Open", "C:\\Projets\\monfichier.csv", 0, false,4) fonctionne parfaitement !

    Un des mystères de l'informatique ...

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

Discussions similaires

  1. VBS - Enregistrer XLS -> CSV
    Par bahraoui dans le forum VBScript
    Réponses: 4
    Dernier message: 08/11/2007, 13h44
  2. Conversion xls / csv
    Par ktsys dans le forum C++
    Réponses: 3
    Dernier message: 18/04/2007, 15h27
  3. tranformer XLS --> CSV en ligne de commande
    Par dev7 dans le forum Administration système
    Réponses: 1
    Dernier message: 29/01/2007, 10h53
  4. Generer un fichier xls,csv a partir d'une requete
    Par minette dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 01/08/2006, 15h56
  5. [Debutant]Download jsp page dans un fichier xls (csv, ...)
    Par bdelporte dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 19/09/2005, 17h16

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