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 :

[Excel] Mise en forme Txt


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut [Excel] Mise en forme Txt
    Salut tout le monde !

    Je suis en 2ème année de DUT GEII et je dois réaliser un programme.
    Ce programme doit me permettre de mettre en forme un fichier txt en tableau Excel sans passer par Excel. Tout doit être fait automatiquement pour permettre d'avoir un tableau Excel béton ...

    Ce tableau sera ma base de donnée, le traitement du tableau est facile grâce au tuto et à la faq (même s'il y a quelques erreurs ^^).

    Le hic c'est pour mettre en forme le txt... (rien dans le tuto et dans la FaQ donc je navigue dans l'inconnue)
    Mon idée était de le faire manuellement et d'enregistrer une macro
    voila ce que j'obtiens en VB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     ChDir "A:\"
        Workbooks.OpenText Filename:="A:\168.txt", Origin:=xlMSDOS, StartRow:=1, _
            DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10, 1), Array(20, 1) _
            , Array(34, 1), Array(48, 1), Array(60, 1), Array(94, 1), Array(112, 1)), _
            TrailingMinusNumbers:=True
    Alors j'arrive bien à ouvrir un txt sous excel mais je n'arrive pas à changer l'origine (c'est à dire que je me retrouve avec des virgule à la place des accents aigu)
    Je vais essayer en attendant vos réponses de modifier mes champs (paramètres FieldInfo et Array)

    Merci d'avance

  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
    Par défaut
    Salut ptit fab:
    Alors premierement si tu a releve des erreurs dans la FAQ dis nous ou qu'on les fasse corriger au plus vite
    Tu charge ton fichier sous Excel est il bien presente dans chaque colonne?
    Qu'appel tu changer d'origine?
    Est ce que ton probleme ne serait pas de charger un fichier TXT ou CSV dans Excel en ayant le formatage des colonnes a l'ouverture, exemple colonne TXT, colonne DATE ...?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Lu

    En faite le fichier que je récupère est un fichier .imp auquel on change l'extension en .txt.
    Dans ce fichier il y a plusieurs colonne Date, heure , nom, informations concernées.
    Le problème c'est les deux dernière colonnes ... car les noms et les informations concernées ont des espaces et Excel quand il voit un espace (TAB ou ESPACE) il crée une nouvelle colonne et c'est que je veux supprimer.... il me fait donc un près traitement mais que je dois améliorer.

    Ce soir si j'ai le temps je vous mettrai quelque imprime écran pour être plus clair de ce que je fais et ce que je veux à la fin.

    Hors Sujet :
    J'ai un petit problème pour copier-coller un fichier dans un autre, j'ai pas eu le temps de regarder s'il y avait quelque chose dans le forum.

    Pour les erreurs :
    il y a souvent écrit OleProdedure à la place de OleProcedure
    Et il me semble que pour fermer ce n'est pas :
    vMSExcel.OleProcedure("Close") mais vMSExcel.OleFunction("Close");
    Je vous le confirmerai ce soir

    @++

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Bonjour

    Bon voilà j'ai avancé un peu et mon problème c'est la fonction Array sous VB que je n'arrive pas à retranscrire sous C++
    Si quelqu'un à une idée ...

    @++

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Re-Bonjour,

    J'ai regardé de plus près ce que je faisais et je me suis rendu compte que quand on utilise la fonction opentext il nous le charge en csv c'est à dire qu'il cherche un caractère de délimitation. Or quand je le fais à la main, c'est à dire quand sous Excel je fais Ouvrir\av.txt il me lance l'Assitant d'importation de texte dans l'étape 1 dans Type de données d'origine on a le choix entre délimité (csv) et largeur fixe et c'est ca que je veux mais je n'arrive pas à le lancer depuis builder et ca me

    Si quelqu'un à déja réussi ....

    @++

  6. #6
    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
    Citation Envoyé par ptit fab
    Bonjour

    Bon voilà j'ai avancé un peu et mon problème c'est la fonction Array sous VB que je n'arrive pas à retranscrire sous C++
    Si quelqu'un à une idée ...

    @++
    Salut ptit fab,

    j'avais tenter d'expliquer la fonction Array dans un post :

    http://www.developpez.net/forums/sho...d.php?t=194199


    En espérant t'avoir aider

    @+

    Xav

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Merci pour ta réponse Xav++, j'essayerai ca demain car je vais bientot débauché ...
    Par contre j'ai un autre problème quand je veux copier-coller.

    En faite j'ouvre plusieurs fichier que je mets en forme et à la fin je veux en avoir un seul...
    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
    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
    void __fastcall TForm1::Bp_LancerClick(TObject *Sender)
    {
            //Ouvre Excel, Charge le fichier *.xls, Met en forme le fichier, Sauvegarde
     
            bool res;
            Variant vCopy,vDestination;
            AnsiString aDestination;
            try
            {
                    vMSExcel = Variant::GetActiveObject("Excel.Application");
            }
            catch(...)
            {
                    vMSExcel = Variant::CreateObject("Excel.Application");
            }
            vMSExcel.OlePropertySet("Visible", true);
            vMSExcel.OlePropertySet("ScreenUpdating", true);
            Excel = 1;
            //Ouverture du ou des fichiers
            Variant title = StringToOleStr("Ouvrir"); // titre à donner à la boite de dialogue
            Variant multiselect = true; // selection multiple autorisée
            fichier = ExcelApplication1->GetOpenFilename(EmptyParam, EmptyParam, title, EmptyParam, multiselect, 0);
            if(fichier.IsArray())
            {
                    lirets->Enabled = true;
                    test->Enabled = true;
                    derlin->Enabled = true;
                    Lire->Enabled = true;
                    Miseenforme->Enabled = true;
                    Filtre->Enabled = true;
                    test->Enabled = true;
                    for(j=1 ; j<=fichier.ArrayHighBound(1) ; j++)
                    {
                            vFileName = fichier.GetElement(j);
                            vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
                            vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName);
                            vMSExcel.OlePropertySet("DisplayAlerts", false);//Désactive les alertes
                            vMSExcel.OlePropertySet("WindowState", -4140);//Minimise la fenêtre Excel
                            //Mise en Forme
                            iLigneLimite = CompteurLigne(vXLWorkbook);
                            i=1;k=1;
                            do
                            {
                                    vCol=StringToOleStr("B");
                                    vLin=StringToOleStr((AnsiString)i);
                                    vWsRange=vCol+vLin;
                                    vCell = vWorksheet.OlePropertyGet("Range", vWsRange);
                                    aCell=vCell;
                                    if((aCell=="")||(aCell=="Heure"))
                                    {
                                            iLinSupp=i;
                                            vLin=StringToOleStr((AnsiString)iLinSupp);
                                            vRow=vWorksheet.OlePropertyGet("Rows", vLin);
                                            vRow.OleProcedure("Delete", -4162);
                                    }
                                    else
                                    {
                                            i++;
                                    }
                                    k++;
                            }
                            while(k<=iLigneLimite);
                            if(j>1)
                            {
                                    iLigneLimite = CompteurLigne(vXLWorkbook);
                                    vCol=StringToOleStr("A");
                                    vLin=StringToOleStr((AnsiString)iLigneLimite);
                                    vDestination = vCol+vLin;
                                    //Memo1->Text = vDestination;
                                    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
                                    vWorksheet.OleProcedure("Paste",vDestination);
                            }
                            vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
                            vUsedRange = vWorksheet.OlePropertyGet("UsedRange");
                            vCopy = vUsedRange.OleFunction("Copy");
                    }
                    //vFileName="c:\\affsiam\\transfert.xls";
                    //vXLWorkbook.OleFunction("Saveas", vFileName);
                    vMSExcel.OlePropertySet("ScreenUpdating", true);
            }
    }
    Et j'ai le droit à la super erreur "Une exception s'est produite" (J'ai envie de lui faire bouffer son erreur je vais devenir dingue à force de la voir )
    Le pire c'est qu'il copie bien ....

    Merci d'avance

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 27
    Par défaut
    Re-Re-bonjour,

    bon j'avance je pense avoir trouver la solution à mo problème c'est la fonction : TextTocolumns.
    Si quelqu'un s'en est servi peut-il m'aider ...

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

Discussions similaires

  1. [VBA-Excel] Mise en forme d'un classeur
    Par snooopy007 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/07/2006, 18h37
  2. vb6 & excel : mise en forme d'une cellule
    Par couscoussier dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/03/2006, 18h12
  3. Mise en forme TXT
    Par niko40 dans le forum C++
    Réponses: 2
    Dernier message: 23/02/2006, 12h07
  4. [VBA][Excel] mise en forme conditionnelle
    Par titflocon dans le forum Access
    Réponses: 9
    Dernier message: 19/12/2005, 10h13
  5. [ACCESS-EXCEL] Mise en forme des tableaux
    Par mpascolo dans le forum Access
    Réponses: 4
    Dernier message: 20/10/2005, 16h03

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