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 :

VB Array(1, 2) correspondance en C++


Sujet :

C++Builder

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Par défaut
    bon blondelle j'ai pas très bien compris comment on fait pour "enregistrer sous" car j'y arrive pas effectivement
    je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.xls", -4143, NULL, NULL, false, false);
    ou
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.xls", -4143);
    ou
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.csv", 6, false);
    mais aucune ne marche j'ai une exception EVariantTypeCastError avec le message 'Impossible de convertir le variant de type (Boolean) en type (Dispatch)'
    donc comment faire ???

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Par défaut
    Essaye ceci, peut-être que cela marche, mais je n'ai pas testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName.c_str(), -4143, NULL, NULL, false, false);
    J'essaye de regarder tout ça chez moi ce soir

    Xav

  3. #23
    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
    sony351 a ecrit:
    bon blondelle j'ai pas très bien compris comment on fait pour "enregistrer sous" car j'y arrive pas effectivement
    je fais un
    Code :
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.xls", -4143, NULL, NULL, false, false);
    ou
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.xls", -4143);
    ou
    vXLWorkbook.OleProcedure("Saveas", "c:\\test.csv", 6, false);mais aucune ne marche j'ai une exception EVariantTypeCastError avec le message 'Impossible de convertir le variant de type (Boolean) en type (Dispatch)'
    donc comment faire ???
    J'ai fait un essai avec les deux valeurs a NULL et ca marche chez moi.
    je pense comme Xav++ que c'est "vFileName" qui est mal declare.
    soit tu fais:
    Variant vFileName; // toujour faire la declaration des variants
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName, -4143, NULL, NULL, false, false);
    soit tu fais:
    String vFileName;
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName.c_str(), -4143, NULL, NULL, false, false);
    Il faut declarer vFileName avec le nom de chemin.
    Il ne faut pas mettre le mon de chemin dans la procedure
    Je pense que ca doit marcher comme cela sinon donne ton code pour voir d'ou vient l'erreur

  4. #24
    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
    Une petite question que j'ai oubliee de poser et qui me turlupine.

    pourquoi cette ecriture provoque une erreur
    Variant vOtherChar = ":";
    et que celle ci marche
    Variant vOtherChar = ':';
    je ne comprend pas la difference et il y en forcement une

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Par défaut
    Bon je viens de tester la sauvegarde, et ça marche pas

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsiString vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName.c_str(), -4143, NULL, NULL, false, false);
    J'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Conversion de type variant incorrecte
    sur la dernière ligne et il ouvre le fichier "sysvari.h" ????????
    Même erreur que les fois précédentes....

  6. #26
    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
    Xav++ a ecrit:
    Bon je viens de tester la sauvegarde, et ça marche pas
    Regarde mon poste precedent je declare differement la variable "vFileName" et sur tout il faut bannir les AnsiString avec OleExcel
    Dans la FAQ pour les variables non utilisees il disent d'utiliser le mot "Unassigned" je ferais le teste remplacer "NULL" par "Unassigned"

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Par défaut
    Oups Je veux aller trop vite. Nouvel essai avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String vFileName;
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("SaveAs", vFileName.c_str(), -4143, Unassigned, Unassigned, false, false);
    Résultat : même erreur

  8. #28
    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
    Xav++ a ecrit:
    Oups Je veux aller trop vite. Nouvel essai avec :


    Code :
    String vFileName;
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("SaveAs", vFileName.c_str(), -4143, Unassigned, Unassigned, false, false);
    Résultat : même erreur
    Je viens de faire l'essai et j'ai aussi l'erreur fait l'essai avec la declaration en Variant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Variant vFileName; // toujour faire la declaration des variants
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName, -4143, NULL, NULL, false, false);

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Variant vFileName; // toujour faire la declaration des variants
    vFileName = "c:\\test.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName, -4143, NULL, NULL, false, false);
    Même erreur

  10. #30
    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
    Xav++ a ecrit:
    Même erreur
    Je vois que tu t'enerve a l'ecran respire profondement OleExcel demande une bonne dose de patience, je poste mon code qui est en cours d'essai pour la sauvegarde avec mot de passe il n'est pas nettoye
    le 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    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\\plan_gps\\PLAN_GPS\\télégraphe.csv";
    vNotUsed = Unassigned;
    vSeparator = 1;
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,
    vNotUsed, vSeparator);
     
    // formatter une cellule ou une colonne au format desire
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    // sans chiffres c'est la colonne qui est selectionnee
    vRange = vWorksheet.OlePropertyGet("Range", "B:B");
    vRange.OlePropertySet("NumberFormat", "@"); // format Texte
    //vWorksheets = vXLWorkbook.OlePropertyGet("Worksheets");
    //vWorksheet.OleFunction("Select");
    //Variant vCells;
    //vCells = vWorksheet.OlePropertyGet("Select");
     
    Variant vSheetFunction;
    vSheetFunction = vMSExcel.OlePropertyGet("Selection");
    int res = vSheetFunction.OleFunction("Copy", vSheetFunction);
     
    //vWorksheet.OleFunction("SelectionCopy");
    //---vWorksheet.OlePropertyGet("Range", "A1");
    //vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    //vWorksheet = vWorksheets.OleFunction("Select");
    //vWorksheet.OleFunction("Copy");
    //vSheetFunction = vMSExcel.OlePropertyGet("Selection");
    //---vWorksheet.OleFunction("Paste");
     
    //
    // preparation de la sauvegarde
    //
    // on fait un teste si le fichier existe on l'efface
    //
    if (FileExists ("C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe.xls"))
            DeleteFile ("C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe.xls");
     
     
     
    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
    // attention si le fichier a ete sauvegarde avec un mot de passe
    // il ne peut pas etre reecrit cela provoque une exception
    Mot_passe = "jpb"; // pour la protection du fichier
     
    Password = Mot_passe; // mot de passe pour proteger le fichier
     
    WriteResPassword = 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\\plan_gps\\PLAN_GPS\\télégraphe.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Unassigned, Unassigned, ReadOnlyRecommended, CreateBackup);
    //vXLWorkbook.OleProcedure("Save", vFileName);
     
    // fermeture d'excel
    vMSExcel.OleFunction("Quit");
    // liberation memoire
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------
    /*
    Variant vCell;
    vCell = vWorksheet.OlePropertyGet("Range", vWsRange);
    Variant vCell;
    vCell = vWorksheet.OlePropertyGet("Cells", vX, vY);
    Variant vRange;
    vRange = vWorksheet.OlePropertyGet("Range", vWsRange);
    Variant vRange;
    vRange = vWorksheet.OlePropertyGet("Range", vCell1, vCell2);
    vCel.OlePropertySet("NumberFormat", vValue);
    */

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Par défaut
    Bon Monsieur blondelle merci avant tout de débatre le pb ensemble avec Xav++ aussi, merci, mais pour revenir au pb de Saveas c'est juste après le open texte que ça plante (erreur declaration Variant) mais là tu mets trop de code blondelle et moi je sèche toujours les gars, haaaaaaaaaaaaa.

    haaaaaaaa

  12. #32
    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
    sony351 a ecrit:
    Bon Monsieur blondelle merci avant tout de débatre le pb ensemble avec Xav++ aussi, merci, mais pour revenir au pb de Saveas c'est juste après le open texte que ça plante (erreur declaration Variant) mais là tu mets trop de code blondelle et moi je sèche toujours les gars, haaaaaaaaaaaaa.

    haaaaaaaa
    Fais voir le code que l'on regarde ce qui ne marche pas.

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Par défaut
    après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variant vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName, vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar, vFieldInfo);
    je voudrais faire une sauvegarde sous fichier xls
    donc je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vXLWorkbook.OleProcedure("Saveas", "c:\\fichier_fin.xls", -4143,);
    mais ça plante : "Impossible de convertir le variant de type (Boolean) en type (Dispatch)"

  14. #34
    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
    sony351 a ecrit
    mais ça plante : "Impossible de convertir le variant de type (Boolean) en type (Dispatch)"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // declaration des variables
    FileFormat = -4143;
    Variant vFileName;
     
    // declaration du chemin du fichier
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\télégraphe.xls";
     
    // sauvegarde sous le format TXT
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Unassigned, Unassigned, Unassigned, Unassigned);
    J'ai sorti ce qui etait dans mon code et qui semble te poser probleme ecrit de cette facon ca doit fonctionner, chez moi ca fonctionne.

    Verifie bien que les variables que tu utilise soient bien dans le sous programme de sauvegarde car tu aura ce type d'erreur, sinon les declarer en public.

  15. #35
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 94
    Par défaut
    bon ça yé c'est fini merci à vous les gars
    blondelle le pb venait du pointeur vXLWorkbook qui reste nulle uniquement avec opentxt malgrés le
    vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", ...
    donc moi je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vXLWorkbooks.OleFunction("OpenText",
        vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier,
        vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther,
        vOtherChar, vFieldInfo);
     vXLWorkbook = vXLWorkbooks.OlePropertyGet("Item", 1);
    et là ça marche, mon objet vXLWorkbook n'est pas NULL et je peux faire mes traitements,
    donc pour finir le post je met le code final pour
    ouvrir un txt ou csv et l'enregistrer en xls
    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
    33
    34
    35
    36
    37
    38
     Variant vXLWorkbooks, vXLWorkbook, vMSExcel;
     AnsiString vFileName = "C:\\temp.txt"; //nom du fichier
     Variant vOrigin = 1; // = xlWindows format Windows (par défaut)
     Variant vStartRow = 1; // on commence à la 1ère ligne (par défaut)
     Variant vDataType = 1; // = xlDelimited format délimité (par défaut)
     Variant vTextQualifier = 1; // = xlTextQualifierDoubleQuote qualificateur de texte (par défaut)
     Variant vConsecutiveDelimiter = false; // pas de délimitateur consécutif
     Variant vTab = false; // pas délimitateur tab
     Variant vSemicolon = true; // délimitateur ";"
     Variant vComma = false; // pas délimitateur virgule
     Variant vSpace = false; // pas délimitateur espace
     Variant vOther = false; // pas délimitateur autre
     Variant vOtherChar = ';';//NULL; // délimitateur Other non actif
     
     int LeNombreDeChamps = 3;
     Variant vFieldInfo;
     vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, 2, 0, 1)), varInteger);
     vFieldInfo = VarArrayCreate(OPENARRAY(int, (0, LeNombreDeChamps - 1, 0, 1)), varInteger);
     for(int i = 0; i < LeNombreDeChamps; i++)//ceci va mettre au format texte toutes les colonnes
     {
       vFieldInfo.PutElement(i + 1, i, 0);
       //on affecte i + 1 (i + 1 qui est la colonne Excel N°i + 1 en fait)
       //à la ligne i colonne 0 du tableau vFieldInfo
     
       vFieldInfo.PutElement(2, i, 1);
       //on affecte 2 (Format Texte = 2) à la ligne i colonne 1 du tableau vFieldInfo
     }
     vMSExcel = Variant::CreateObject("Excel.Application");
     vMSExcel.OlePropertySet("Visible", true);
     vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
     vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin,
                                            vStartRow, vDataType, vTextQualifier,
                                            vConsecutiveDelimiter, vTab, vSemicolon,
                                            vComma, vSpace, vOther, vOtherChar, vFieldInfo);
     vXLWorkbook = vXLWorkbooks.OlePropertyGet("Item", 1);
     xlNormal = -4143;
     chemin = "c:\\temp.xls";
     vXLWorkbook.OleProcedure("Saveas", chemin, xlNormal, "", "", false, false);

  16. #36
    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
    Ton code est equivalent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorkbook = vXLWorkbooks.OlePropertyGet("Item", 1);
    a ceci l'ecriture est juste differente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    L'essentiel est que le programme marche.
    Si tu n'a plus d'autres question pense au petit resolu.
    Bon courage.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. correspondances entre arrays
    Par Jasmine80 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2007, 09h41
  2. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 16h37
  3. Réponses: 2
    Dernier message: 23/02/2003, 01h49
  4. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 20h47

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