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 :

Ouvrir fichier texte avec Excel depuis C++ Builder


Sujet :

C++Builder

  1. #1
    LB
    LB est déconnecté
    Membre actif
    Inscrit en
    Février 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 33
    Par défaut Ouvrir fichier texte avec Excel depuis C++ Builder
    Bonjour,

    je cherche à ouvrir un fichier txt sous Excel.
    Si je procède ainsi, le fichier s'ouvre mais sans distinction de colonnes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    vFileName = "M:\\Docs\\Fic.txt";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", WideString(vFileName));
    En effet, si j'ouvre mon fichier directement depuis Excel je dois préciser dans l'assistant que le type de données d'origine est de largeur fixe.

    Par contre, si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", WideString(vFileName));
    les données sont bien réparties dans chaque colonne.
    Toutefois, quelle que soit la commande suivante, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vFileName = "M:\\Docs\\Fic.xls";
    vXLWorkbook.OleProcedure("Save as", vFileName);
    une erreur
    EVariantTypeCastError 'Could not convert variant of type (boolean) into type (Dispatch)'
    se produit.
    Cela pourrait-il venir du format de vFileName ?
    Je ne suis pas parvenu à trouver de réponse.

    Merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    remplace "save as" par "Saveas"
    cdlt

    jette un coup d'oeil su ce tuto https://lfe.developpez.com/Excel/
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    LB
    LB est déconnecté
    Membre actif
    Inscrit en
    Février 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 33
    Par défaut
    Bonjour,

    merci pour ton retour.

    Il s'agit d'une faute de frappe, j'ai bien saisi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook.OleProcedure("Saveas", vFileName);
    D'ailleurs, le problème reste le même quelle que soit la fonction ou procédure.

  4. #4
    LB
    LB est déconnecté
    Membre actif
    Inscrit en
    Février 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 33
    Par défaut
    En fait, l'erreur que j'indique se produit avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", WideString(vFileName), 2);
    Si je saisis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", WideString(vFileName));
    l'exception est la suivante : EOleException IsBound() failed- c:\bcb\emuvcl\utilcls.h/4249
    et dans le sysvari.h l'erreur pointe sur la dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Variant::OleProcedure(const String& name, P1 p1, P2 p2, P3 p3)
      {
        TAutoArgs<3> args;
        args[1] = p1;  args[2] = p2;  args[3] = p3;
        OleProcedure(name, static_cast<TAutoArgsBase*>(&args));
      }

  5. #5
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    il y a une abondante littérature sur ce sujet sur le Web, manifestement tu n'est pas le seul a avoir eu ce problème
    j'ai réalisé un test avec Office 365 et mon fichier texte est correctement mis en forme dans Excel avec la commande "Open".
    je ne me trouve pas dans les même conditions que toi.
    je pense que l'objet créé dans Excel attend lors de la sauvegarde sous un autre nom(SaveAs) que certains paramètres soient renseignés.
    voir ci-joint https://msdn.microsoft.com/en-us/vba...s-method-excel
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut
    ci-dessous une macro VB ouvrant en fichier texte et le sauvegardant sous un format excel (.xlsx)
    Code vba : 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
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        ChDir "C:\Users\Jean-Marc\Desktop"
        Workbooks.OpenText Filename:="C:\Users\Jean-Marc\Desktop\Test.txt", Origin _
            :=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
            , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers _
            :=True
        ActiveWorkbook.SaveAs Filename:="C:\Users\Jean-Marc\Desktop\Test.xlsx", _
            FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    End Sub
    tu remarquera la présence des paramètres FileFormat et CreateBackup attendu par cette fonction

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    LB
    LB est déconnecté
    Membre actif
    Inscrit en
    Février 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 33
    Par défaut
    En effet, j'avais déjà consulté ce site.
    J'ai tenté plusieurs combinaisons du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook.OleProcedure("SaveAs", vFileName2.c_str(), FileFormat, WideString(Password), WideString(WriteResPassword), ReadOnlyRecommended, CreateBackup);
    en donnant différentes valeurs à chaque paramètre mais sans succès.

    D'ailleurs, l'enregistreur de macro propose une commande du même genre.
    Je continue de buter.

  8. #8
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    une des nombreuses bizarreries de Excel!

    En mode debug que se passe il dans Excel une fois que tu a exécuté la commande "OpenText"
    si tu essaye de sauvegarder manuellement depuis excel le fichier que te propose-il comme options?
    pour ma part j'ai essayé avec un document texte encolonné avec des Tab comme séparateur
    et je n'avais pas d'erreur de présentation sous excel avec la commande "open"
    il faut analyser les différences entre ces 2 méthodes,car il semblerait que le comportement ne soit pas identique avec toutes les versions

    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  9. #9
    LB
    LB est déconnecté
    Membre actif
    Inscrit en
    Février 2003
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 33
    Par défaut
    Le mode pas à pas dans C++ indique le plantage juste sur l'instruction qui pose problème, donc pas d'une grande aide.

    Si je procède aux opérations souhaitées en passant directement par Excel (2007), tout fonctionne correctement. Au moment de l'enregistrement / sous du fichier txt mis en colonne vers un autre format, le menu me propose "Classeur Excel" correspondant au format xls, "format XML", avec macros, Binaire, ou "Compatible" avec des versions antérieures de Excel.

    Je n'ai pas de problème particulier si je programme cette suite d'instructions en VBA.
    Le problème ne se pose qu'au travers de mon application en C++.
    C'est pourquoi je pense que le souci vient de là.

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/08/2008, 13h36
  2. Réponses: 1
    Dernier message: 25/08/2008, 11h57
  3. ouvrir fichier .txt dans excel avec des champs texte
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/05/2008, 18h27
  4. Ouvrir un fichier text avec Excel
    Par Chopard dans le forum Delphi
    Réponses: 2
    Dernier message: 07/11/2006, 22h33
  5. comment ouvrir un fichier XML avec excel
    Par ALCINA dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 24/03/2006, 14h42

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