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 :

Procedure SaveAs Ole Excel


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Procedure SaveAs Ole Excel
    Bonjour à tous,
    après ouverture d'un classeur Excel (en C++ Builder 5), je tente de le sauvegarder au format CSV en utilisant la procédure OLE Saveas comme explicitée dans la FAQ et dans le tutoriel "Pilotage OLE d'Excel ...".
    Durant l'execution, Borland me sort une erreur EOleSysError : nom inconnu. venant de sysvari.h (void Variant::OleProcedure(const String& name, P1 p1, P2 p2) )
    Voila l'extrait de mon source, si quelqu'un à une idée ... je prends!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Variant MSExcel = Variant::CreateObject("Excel.Application");
    MSExcel.OlePropertySet("Visible", false);
    MSExcel.OlePropertySet("DecimalSeparator", ".");
    MSExcel.OlePropertySet("UseSystemSeparators", false);
    Variant vFileName = StringToOleStr(OpenExcel->FileName);
    Variant Workbook = MSExcel.OlePropertyGet("Workbooks");
    Workbook.OleFunction("Open", vFileName);
    Variant Csv = "temp.csv";    // just for testing
    Workbook.OleProcedure("Saveas", Csv, 6);      // <--- C'est la que ça plante
    Workbook.OleFunction("Close");
    MSExcel.OleFunction("Quit");
    Merci

  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 kerozan
    Un lien sur la Faq avec la fonction complete SaveAs

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Salut Blondelle,
    merci pour le lien, mais je l'ai déjà scrupté avant d'exposer mon problème.
    J'ai aussi essayé en passant tous les Variant, mais rien à faire .. toujours cette d'erreur.
    A+ et n'abuse pas des Haribo (sympa Uzes !

  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
    n'abuse pas des Haribo
    Je ne fais jamais plus d'un abus a la fois
    Ton code n'est pas complet d'ou l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Variant MSExcel = Variant::CreateObject("Excel.Application");
    MSExcel.OlePropertySet("Visible", false);
    MSExcel.OlePropertySet("DecimalSeparator", ".");
    MSExcel.OlePropertySet("UseSystemSeparators", false);
    //Variant vFileName = StringToOleStr(OpenExcel->FileName);
    Variant Workbooks = MSExcel.OlePropertyGet("Workbooks");
    Variant Workbook = Workbooks.OleFunction("Add");
    Variant vWorksheet = Workbook.OlePropertyGet("Worksheets", 1);
    //Workbook.OleFunction("Open", vFileName);
    Variant FiCsv = "c:\\temp.CSV";    // just for testing
    Workbook.OleProcedure("Saveas", WideString(FiCsv), 6);      // <--- C'est la que ça plante
    Workbook.OleFunction("Close");
    MSExcel.OleFunction("Quit");
    Je te laisse modifier j'ai passe au rouge ce que j'ai modifie

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Blondelle pour tes lumières !
    j'avais effectivement sauté une étape.
    Par contre as tu une idée pour faire plus simple, le but étant de convertir le contenu d'un fichier xls sélectionné par un TOpenDialog en un fichier ascii (le format csv me conviens parfaitement) pour post traitement.
    J'avais opter pour l'ouverture d'excel en tache de fond (non visible), de charger le classeur au format xls puis de le sauver sous un nom bidon au format csv. Le problème est qu'une fenetre me demandant si je veux enregistrer les modifs de ce fichier bidon apparait alors que je souhaiterai qu'il n'y ai pas de confirmation à faire.
    Voila mon nouveau code corrigé:
    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
     
    if (OpenExcel->Execute())
       {
       Variant MSExcel = Variant::CreateObject("Excel.Application");
       MSExcel.OlePropertySet("Visible", false);
       MSExcel.OlePropertySet("DecimalSeparator", ".");
       MSExcel.OlePropertySet("UseSystemSeparators", false);
     
       //_____________________________ ouvre le classeur
       Variant vFileName = StringToOleStr(OpenExcel->FileName);
       Variant Workbooks = MSExcel.OlePropertyGet("Workbooks");
       Variant Workbook = Workbooks.OleFunction("Open", vFileName);
     
       //_____________________________ Sauve classeur au format cvs (ascii)
       AnsiString s = Path + "\\temp.csv";
       Variant CSV = StringToOleStr(s);
       Workbook.OleProcedure("Saveas", WideString(CSV), 6);
     
       //_____________________________ fermeture du classeur
       Workbook.OleFunction("Close");
     
       //_____________________________ fermeture d'excel
       MSExcel.OleFunction("Quit");
       }

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Ne pas tenir compte du message précédent.
    J'ai ajouté la demande de désactivation des messages Excel de demande de confirmation par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MSExcel.OlePropertySet("DisplayAlerts", false);
    et ça marche.
    Merci encore pour le support !
    A+

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

Discussions similaires

  1. [OLE Excel] Aller jusqu'à la dernière cellule rempli
    Par JBrek dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 07/08/2009, 19h21
  2. Petit prob avec l'OLE EXCELL sous builder
    Par vladi dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/03/2005, 19h30
  3. Manipulation d'un Objet OLE Excel ?
    Par NiKro75 dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/07/2004, 17h43
  4. [OLE Excel] Récupérer une colonne d'un coup
    Par Nemerle dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/05/2004, 15h56
  5. [OLE Excel] Erreur
    Par JBrek dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 23/03/2003, 18h28

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