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, 08h41
  2. TStringList en array of string
    Par JediKerian dans le forum Langage
    R�ponses: 2
    Dernier message: 20/03/2003, 15h37
  3. R�ponses: 2
    Dernier message: 23/02/2003, 00h49
  4. passage en param�tre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    R�ponses: 4
    Dernier message: 27/11/2002, 19h47

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