1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD importation de gros fichier excel vers HFSQL ou le parcourir

Discussion dans 'Résolution problème & conseils' créé par elhacene, Oct 17, 2018.

  1. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    Bonjour !

    j'ai essayé d'importer un gros fichier excel de 287 557 ligne dans windev sans succé windev ce plante et si j'aissaye de l'importer par programmation il m'envoi xlsnbligne=0, or que je le fait facilement avec des petits fichier !!!!!!!!! es que windev est vraiment incapable de importé des fichier excel ce qui est donc le contraire ce qu'elle prétend pcsoft!!!!!!!
     
    #1 elhacene, Oct 17, 2018
    Dernière édition par un modérateur: Oct 17, 2018
    Tags:
  2. redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    230
    J'aime reçus:
    226
    Bonjour

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    t'a pas essayer d'importer les données dans ton analyse ?
    ou bien tu fais enregistrer ton fichier excel en CSV ou texte et d'utiliser

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
    elhacene apprécie ceci.
  3. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    merci les amis avant de lire vos réponses j'ai commencais par importé par tranche:cryingface: et c'est fatiguant je vais essai vos proposition!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Hé oui, la gestion du XLS et XLSx a ses limites :(

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    => On peut supposer qu'il en est de même dans les importations et exportations par programmation !

    J'utilise beaucoup Excel pour de gros fichiers et je viens de faire 2 tests avec WD 23 et WDMap.
    Voir le fichier TXT ci-joint avec quelques détails.

    :)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ,
    converti en CSV, il y a des pertes (c'est du TXT)

    D'ailleurs, je viens de tenter de créer un projet avec un CSV de 40 Mo et mon FIC est vide.
    Il y a quelques temps, j'avais fais une importation CSV vers FIC avec fLiligne et oui, ça avait bien fonctionné

    :)
    Cliquez pour agrandir...

    j'ai essayé avec csv mais windev ce plonte et toure en rond, mon fichier a 50 colone et plus de 287 557 ligne !!!!!
    quand je prend juste une petite partie sa fonction l'importation direct ou par programation !!!!!!!!!!!!!
     
    #3 elhacene, Oct 21, 2018
    Dernière édition par un modérateur: Jan 23, 2019
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    2,879
    J'aime reçus:
    1,531
    A tu essayer
    L' Utilisation de la fonction fLitLigne
    Voir

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • charlie

    charlie Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    200
    J'aime reçus:
    189
    J'ai importé lors de la création de fichier, dans l'analyse, un fichier csv qui donne un fichier de 1 906 884 lignes , bon j'ai 9 colonnes ( je ne pouvais pas le faire sur excel car 32 bits, mais j'ai trouvé un prog ( macro excel qui générait les calculs de combinaisons en fichier csv, assez long mais efficace)
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    J'ai importé lors de la création de fichier, dans l'analyse, un fichier csv qui donne un fichier de 1 906 884 lignes , bon j'ai 9 colonnes ( je ne pouvais pas le faire sur excel car 32 bits, mais j'ai trouvé un prog ( macro excel qui générait les calculs de combinaisons en fichier csv, assez long mais efficace)
    Cliquez pour agrandir...
    et alors la suite ..... !!!!

    avec le format Xls par programmation sa se passe sans problèm sauf que le fichier en format xls est limité a 65535 :oops:
    et avec Xlsx avec un fichier qui dépasse ce nombre windev a du mal a lire le contenu et message erreur "vous avez appelé la fonction xlsouvre erreur pendant la lecture de la valeur //sheet/sheet[@] not found. "
    je pense que la fonction xlsouvre() n'a pas été revu par pcsoft pour le format xlsx!
     
    #6 elhacene, Oct 22, 2018
    Dernière édition par un modérateur: Jan 23, 2019
    joker apprécie ceci.
  • charlie

    charlie Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    200
    J'aime reçus:
    189
    Et, comme plus haut tu dis ça:
    "
    j'ai essayé avec csv mais windev ce plonte et toure en rond, mon fichier a 50 colone et plus de 287 557 ligne !!!!!
    quand je prend juste une petite partie sa fonction l'importation direct ou par programation !!!!!!!!!!!!!"
    Je voulais te dire que ce fichier à plus de lignes et je l'ai importé direct par l'import de données dans l'analyse, mais c'est vrai il n'a pas autant de colonnes.
    c'est un csv de 40 mégas

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    : tu dis
    "avec le format Xls par programmation sa se passe sans problèm sauf que le fichier en format xls est limité a 65535"
    Alors qu'en 64 bits un xls peut ouvrir jusqu'au million je crois, mais il y a des problemes de mémoire
    Voir dessous pour ceux qui ont office 20016

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    L’environnement 32 bits requiert 2 gigaoctets (Go) d’espace d’adressage virtuel, partagé par Excel, le classeur et les compléments s’exécutant dans le même processus. Le partage d’un modèle de données de l’espace d’adressage peut utiliser 500 à 700 Mo, mais peut en utiliser moins si les autres modèles de données et les compléments sont chargés.

    L’environnement 64 bits n’impose aucune limite stricte pour la taille de fichier. La taille de classeur est limitée uniquement par la mémoire et les ressources système disponibles.

    Excel 2016 inclut la fonctionnalité LAA (Large Address Aware) qui permet à la version 32 bits d’Excel 2016 de consommer le double de mémoire lorsque les utilisateurs ont un système d’exploitation Windows 64 bits. Pour plus d’informations, voir

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    .
     
    #7 charlie, Oct 22, 2018
    Dernière édition par un modérateur: Jan 23, 2019
    elhacene et joker aiment ça.
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    Oh!!! c'est du gros travail que ta fait pour moi sa me touche vraiment,!!:winkytongue:

    bref, j'ai déjas passé par ces méthode en capture sauf que j'ai pas pensé au 64 bit par contre un détail important il faut le prendre c'est de faire passé les fichier fic en 2 go dans l'analyse.
    avec mon fichier sa taille est de 70 mo avec xlsx et c'est impossible de le lire pas ta méthode vu que la fonction xlsnbligne renvoi 0 ligne pour les gros fichier
    et en le passant en xls sa se prend que 65535 par feuill et la windev arrive a les lire donc j'ai du cre 6 feuille pour répartir les ligne "la taille passe a 135 mo" puis lire avec windev feuil par feuil.

    je suis maintenant a 151000 ligne en fic et la taille dépasse 3.45Go heuresement que j'ai activé l'option 2go , il me rest encore 136557 ligne a importé
    mais cette méthode et très lourdre vu que le fichier et actualisé chaque 6 mois et l'utilisateur final ne connais pas windev!!:oops:
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Si le but est de ne pas utiliser Excel, je ne vois pas d’autre solution,
    mais avant que Pcsoft développe ces méthodes sans Excel,
    on utilisait directement Excel, plus lent mais avec les limites d’Excel.

    J’ai l’habitude de convertir toutes mes commandes VBA sous WD,
    le test avec plus d’1 million de lignes et 77 colonnes fonctionne bien :

    Code (Windev):
    nXlUp est un entier = -4162
    nXlDown est un entier = -4121
    nXlRight est un entier = -4161
    nXlLeft est un entier = -4159

    nLignes est un entier
    nColonnes est un entier
    sFichierXLS est une chaîne = "Test_1M.xlsx"

    xlsFichier est un objet OLE "Excel.Application"
    xlsFichier>>Visible = OLEFaux

    QUAND EXCEPTION DANS
        xlsFichier>>Workbooks>>

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sFichierXLS)
    FAIRE
       

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ("Impossible d'ouvrir le fichier Excel !")
        RETOUR
    FIN

    nLignes = xlsFichier>>WorkSheets(1)>>Range("A1")>>End(nXlDown)>>Row
    nColonnes = xlsFichier>>WorkSheets(1)>>Range("A1")>>End(nXlRight)>>Column

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (nLignes + " x " + nColonnes)

    POUR nPosLig = 2 _À_ nLignes
        POUR nPosCol = 1 _À_ nColonnes
            SI PAS xlsFichier>>WorkSheets(1)>>Cells(nPosLig, nPosCol)>>Value = "" ALORS
                // La donnée n'est pas vide
            FIN
        FIN
    FIN

    xlsFichier>>ActiveWorkbook>>Saved = OLEVrai
    xlsFichier>>Workbooks>>

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    ()
    xlsFichier>>Quit()
    A+.
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Si le but est de ne pas utiliser Excel, je ne vois pas d’autre solution,
    mais avant que Pcsoft développe ces méthodes sans Excel,
    on utilisait directement Excel, plus lent mais avec les limites d’Excel.

    J’ai l’habitude de convertir toutes mes commandes VBA sous WD,
    le test avec plus d’1 million de lignes et 77 colonnes fonctionne bien :

    Code (Text):
    nXlUp est un entier = -4162
    nXlDown est un entier = -4121
    nXlRight est un entier = -4161
    nXlLeft est un entier = -4159

    nLignes est un entier
    nColonnes est un entier
    sFichierXLS est une chaîne = "Test_1M.xlsx"

    xlsFichier est un objet OLE "Excel.Application"
    xlsFichier>>Visible = OLEFaux

    QUAND EXCEPTION DANS
        xlsFichier>>Workbooks>>Open(sFichierXLS)
    FAIRE
        Erreur("Impossible d'ouvrir le fichier Excel !")
        RETOUR
    FIN

    nLignes = xlsFichier>>WorkSheets(1)>>Range("A1")>>End(nXlDown)>>Row
    nColonnes = xlsFichier>>WorkSheets(1)>>Range("A1")>>End(nXlRight)>>Column

    Info(nLignes + " x " + nColonnes)

    POUR nPosLig = 2 _À_ nLignes
        POUR nPosCol = 1 _À_ nColonnes
            SI PAS xlsFichier>>WorkSheets(1)>>Cells(nPosLig, nPosCol)>>Value = "" ALORS
                // La donnée n'est pas vide
            FIN
        FIN
    FIN

    xlsFichier>>ActiveWorkbook>>Saved = OLEVrai
    xlsFichier>>Workbooks>>Close()
    xlsFichier>>Quit()
    A+.
    Cliquez pour agrandir...
    merci

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    je vais testé sa, mais peut tu expliqué comment utilisé ton code ,
    je veux bien le testé pour calculer la vitesse de transfere avec la méthode de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    qui est parfaite
     
    #10 elhacene, Nov 16, 2018
    Dernière édition par un modérateur: Nov 17, 2018
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    :happyblush jolie tes plus rapide que ton embre
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    La manipulation d’Excel ne pourra jamais être plus rapide qu’un code compilé en C++
    qui lira directement le fichier, mais ce code pourrait avoir ces limites qu’Excel n’a pas.
    Et l’autre soucis de cette manipulation, c’est qu’elle est manuelle (à voir si on ne pas manipuler l’exe en code),
    contrairement au pilotage plus lent mais automatisable.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Merci, je devrai faire des tests dans le cas où l’on n’a pas le choix de la manipulation Excel,
    et voir si mes méthodes ne peuvent pas être optimisées (j’en ai déjà une ici).

    Dans ton code, pour faire de vrais tests, il ne faut pas que l’affichage impact le traitement.
    Il faut annuler l’affichage de la table après le sablier :
    Code (Text):
    Table_amigo..AffichageActif = Faux
    Et l’actualiser avant la restitution du sablier :
    Code (Text):
    Table_amigo..AffichageActif = Vrai
    Avec ça, sur 926 lignes, je passe de 39s à 15s.

    Au fait, quand on veut vérifier un temps de traitement, on utilise : ChronoDébut()

    En réfléchissant, l’objet automation est reconstruit à chaque passage de boucle,
    on peut encore optimiser le code en gardant l’objet de la feuille Excel :

    Code (Text):
    pautFeuilleXLS est un objet Automation dynamique
    ...
    pautFeuilleXLS = xlsFichier>>WorkSheets(1)
    nLignes = pautFeuilleXLS>>Range("A1")>>End(nXlDown)>>Row
    nColonnes = pautFeuilleXLS>>Range("A1")>>End(nXlRight)>>Column
    Pour le reste, on replace dans la boucle xlsFichier>>WorkSheets(1) par pautFeuilleXLS.
    Avec la sauvegarde de la feuille en cours, je passe de 15s à 10s pour mes 926 lignes.
    Résultat : je passe de 39s à 10s.

    PCSoft a sorti une classe cExel, ce serait peut-être plus simple à lire pour vous,
    mais l’avantage de manipuler vous-même Excel est de pouvoir répondre à n’importe
    qu’elle demande en WD du moment qu’Excel sait faire.

    Par exemple : enregistrer les fichiers Excel en PDF sans imprimer,
    au format numérique (pas une image) (Office 2007 et +) (ou Word en PDF) en une seule ligne (de plus) :
    Code (Text):
    xlsFichier>>ActiveWorkbook>>ExportAsFixedFormat(xlTypePDF, "fichier.pdf", xlQualityStandard, OLEFaux, OLEFaux, xlsFichier>>Sheets(sFeuilleMarche)>>Index, xlsFichier>>Sheets(sPagePhoto)>>Index - 1)
    Un fichier PDF de la feuille "marché" jusqu’à la feuille avant les photos, en utilisant le nom des feuilles au lieu des index,
    mais je dois donner leurs index pour la méthode.

    A+.
     
    #12 FreudWD, Nov 19, 2018
    Dernière édition: Nov 19, 2018
    joker, suenodesign et elhacene aiment ça.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Je me doutais que HImporteXLS aurait les mêmes limites,
    mais en mariant les deux mondes, on pourrais gagner du temps.

    Le principe est de lire le fichier Excel avec ce qui peut le lire (ici OLE),
    de le découper aux limites des possibilités de HImporteXLS (ici j’ai mis 4 000 000 cellules),
    puis de donner à la fonction les fichiers du découpage un par un.

    Un fichier Excel de 310 000 lignes sur 72 colonnes met 3 min 30 s.
    Code (Text):
    nXlUp est un entier = -4162
    nXlDown est un entier = -4121
    nXlRight est un entier = -4161
    nXlLeft est un entier = -4159

    sFichierXLS est une chaîne = "Test_310.xlsx"
    sFichierFic est une chaîne = "IMPORT"
    nOngletExcel est un entier = 1

    nMaxDonnees est un entier = 4 000 000
    nMaxLignes est un entier

    nLignes, nColonnes sont des entiers
    nPosLigne, nPosDerLigne est un entier
    nNumFichier est un entier

    dfFichierFIC est une Description de Fichier
    drRubriqueFIC est une Description de Rubrique

    autObjXLS est un objet OLE "Excel.Application"
    autObjXLS>>Visible = OLEFaux

    ChronoDébut()

    QUAND EXCEPTION DANS
        autObjXLS>>Workbooks>>Open(fRepEnCours() + "\" + sFichierXLS)
    FAIRE
        Erreur("Impossible d'ouvrir le fichier Excel !")
        RETOUR
    FIN

    nLignes = autObjXLS>>WorkSheets(nOngletExcel)>>Range("A1")>>End(nXlDown)>>Row
    nColonnes = autObjXLS>>WorkSheets(nOngletExcel)>>Range("A1")>>End(nXlRight)>>Column

    // Déclaration du FIC
    dfFichierFIC..Nom = sFichierFic
    dfFichierFIC..Type = hFichierNormal
    //dfFichier..CryptageFic = hCryptageStandard
    dfFichierFIC..GrosFichier = Vrai

    // Création des autres rubriques à partir de la 1ère ligne
    // Attention, les noms sur la 1ère ligne doivent être uniques
    POUR nPosCol = 1 _À_ nColonnes
        drRubriqueFIC..Nom = autObjXLS>>WorkSheets(nOngletExcel)>>Cells(1, nPosCol)>>Value
        drRubriqueFIC..Type = hRubTexte
        drRubriqueFIC..Taille = 50
        //drRubriqueFic..NullAutorisé = vrai
        HDécritRubrique(dfFichierFIC, drRubriqueFIC)
    FIN

    HDécritFichier(dfFichierFIC)

    nMaxLignes = nMaxDonnees / nColonnes
    // Découpage du XLSX si hors limites
    SI nLignes > nMaxLignes ALORS
        nPosLigne = 2 // Début des données
        nPosDerLigne = nPosLigne + nMaxLignes // Dernière de la limite
        nNumFichier = 1 // Nom des fichiers 1_, 2_ ...

        TANTQUE nPosDerLigne <= nLignes
            autObjXLS>>WorkSheets(nOngletExcel)>>Rows(nPosLigne + ":" + nPosDerLigne)>>Copy
            autObjXLS>>Workbooks>>Add // Nouveau fichier Excel
            autObjXLS>>ActiveSheet>>Paste // Colle les lignes
            autObjXLS>>ActiveWorkbook>>SaveAs(fRepEnCours() + "\" + nNumFichier + "_" + sFichierXLS)
            autObjXLS>>ActiveWorkbook>>Close()
            nPosLigne = nPosDerLigne + 1
            nPosDerLigne = nPosLigne + nMaxLignes
            SI nPosDerLigne > nLignes ALORS
                SI nPosLigne > nLignes ALORS // A-t-on fini ?
                    nPosDerLigne = nLignes + 1
                SINON
                    nPosDerLigne = nLignes
                FIN
            FIN
            nNumFichier++
        FIN
    FIN

    autObjXLS>>ActiveWorkbook>>Saved = OLEVrai
    autObjXLS>>Workbooks>>Close()
    autObjXLS>>Quit()

    SI nNumFichier = 1 ALORS
        HImporteXLS(sFichierFic, sFichierXLS, nOngletExcel, "", hImpIgnorePremièreLigne)
    SINON
        POUR nPos = 1 _À_ nNumFichier - 1
            HImporteXLS(sFichierFic, nPos + "_" + sFichierXLS) // Boucle sur les fichiers générés
        FIN
    FIN

    duDurée est une Durée = ChronoFin()

    Info("fini en " + DuréeVersChaîne(duDurée, "MMm et SSs"))
    Je me suis dit qu’un jour j’en aurais peut-être besoin, j’ai donc fait une p'tit appli avec un peu plus d’options.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Exe + sources en WD 22 :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Pour aller plus loin avec ceux qui ne possèdent pas la table :
    Il faudrait que dans la description des champs, je détecte le format de donnée à partir d’Excel, au lieu de la laisser au format texte.
    Et pour aider encore plus, sortir la description des champs de la table en XML ou autres, pour l’importer rapidement dans l’analyse.

    PS : j’ai banni la jauge, elle multiplie le traitement par 3.

    A+.
     
    #13 FreudWD, Nov 23, 2018
    Dernière édition: Nov 23, 2018
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    bonjours,
    désolé pour le retard , je monque du temps mes amis, c'est que aujourd'hui que je me reconnect bref,

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    je viens juste de lire ta solution j'ai pas encore testé "je rentre au bolo dans 3j", mais vous dite que 310 000 lignes sur 72 colonnes met 3 min 30 s !!!!:eek::p bin mois avec mes 287 557 sur 50 collone avec la méthode de mon amigo

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    avec petite modification à pris plus de 3h et 30 m mais un bon réussi:cool:
    donc je doit testé ta méthode sur mon pc pour prendre des conclusions.
    merci
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Je me doutais que HImporteXLS aurait les mêmes limites,
    mais en mariant les deux mondes, on pourrais gagner du temps.

    Le principe est de lire le fichier Excel avec ce qui peut le lire (ici OLE),
    de le découper aux limites des possibilités de HImporteXLS (ici j’ai mis 4 000 000 cellules),
    puis de donner à la fonction les fichiers du découpage un par un.

    Un fichier Excel de 310 000 lignes sur 72 colonnes met 3 min 30 s.
    Code (Text):
    nXlUp est un entier = -4162
    nXlDown est un entier = -4121
    nXlRight est un entier = -4161
    nXlLeft est un entier = -4159

    sFichierXLS est une chaîne = "Test_310.xlsx"
    sFichierFic est une chaîne = "IMPORT"
    nOngletExcel est un entier = 1

    nMaxDonnees est un entier = 4 000 000
    nMaxLignes est un entier

    nLignes, nColonnes sont des entiers
    nPosLigne, nPosDerLigne est un entier
    nNumFichier est un entier

    dfFichierFIC est une Description de Fichier
    drRubriqueFIC est une Description de Rubrique

    autObjXLS est un objet OLE "Excel.Application"
    autObjXLS>>Visible = OLEFaux

    ChronoDébut()

    QUAND EXCEPTION DANS
        autObjXLS>>Workbooks>>Open(fRepEnCours() + "\" + sFichierXLS)
    FAIRE
        Erreur("Impossible d'ouvrir le fichier Excel !")
        RETOUR
    FIN

    nLignes = autObjXLS>>WorkSheets(nOngletExcel)>>Range("A1")>>End(nXlDown)>>Row
    nColonnes = autObjXLS>>WorkSheets(nOngletExcel)>>Range("A1")>>End(nXlRight)>>Column

    // Déclaration du FIC
    dfFichierFIC..Nom = sFichierFic
    dfFichierFIC..Type = hFichierNormal
    //dfFichier..CryptageFic = hCryptageStandard
    dfFichierFIC..GrosFichier = Vrai

    // Création des autres rubriques à partir de la 1ère ligne
    // Attention, les noms sur la 1ère ligne doivent être uniques
    POUR nPosCol = 1 _À_ nColonnes
        drRubriqueFIC..Nom = autObjXLS>>WorkSheets(nOngletExcel)>>Cells(1, nPosCol)>>Value
        drRubriqueFIC..Type = hRubTexte
        drRubriqueFIC..Taille = 50
        //drRubriqueFic..NullAutorisé = vrai
        HDécritRubrique(dfFichierFIC, drRubriqueFIC)
    FIN

    HDécritFichier(dfFichierFIC)

    nMaxLignes = nMaxDonnees / nColonnes
    // Découpage du XLSX si hors limites
    SI nLignes > nMaxLignes ALORS
        nPosLigne = 2 // Début des données
        nPosDerLigne = nPosLigne + nMaxLignes // Dernière de la limite
        nNumFichier = 1 // Nom des fichiers 1_, 2_ ...

        TANTQUE nPosDerLigne <= nLignes
            autObjXLS>>WorkSheets(nOngletExcel)>>Rows(nPosLigne + ":" + nPosDerLigne)>>Copy
            autObjXLS>>Workbooks>>Add // Nouveau fichier Excel
            autObjXLS>>ActiveSheet>>Paste // Colle les lignes
            autObjXLS>>ActiveWorkbook>>SaveAs(fRepEnCours() + "\" + nNumFichier + "_" + sFichierXLS)
            autObjXLS>>ActiveWorkbook>>Close()
            nPosLigne = nPosDerLigne + 1
            nPosDerLigne = nPosLigne + nMaxLignes
            SI nPosDerLigne > nLignes ALORS
                SI nPosLigne > nLignes ALORS // A-t-on fini ?
                    nPosDerLigne = nLignes + 1
                SINON
                    nPosDerLigne = nLignes
                FIN
            FIN
            nNumFichier++
        FIN
    FIN

    autObjXLS>>ActiveWorkbook>>Saved = OLEVrai
    autObjXLS>>Workbooks>>Close()
    autObjXLS>>Quit()

    SI nNumFichier = 1 ALORS
        HImporteXLS(sFichierFic, sFichierXLS, nOngletExcel, "", hImpIgnorePremièreLigne)
    SINON
        POUR nPos = 1 _À_ nNumFichier - 1
            HImporteXLS(sFichierFic, nPos + "_" + sFichierXLS) // Boucle sur les fichiers générés
        FIN
    FIN

    duDurée est une Durée = ChronoFin()

    Info("fini en " + DuréeVersChaîne(duDurée, "MMm et SSs"))
    Je me suis dit qu’un jour j’en aurais peut-être besoin, j’ai donc fait une p'tit appli avec un peu plus d’options.

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Exe + sources en WD 22 :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Pour aller plus loin avec ceux qui ne possèdent pas la table :
    Il faudrait que dans la description des champs, je détecte le format de donnée à partir d’Excel, au lieu de la laisser au format texte.
    Et pour aider encore plus, sortir la description des champs de la table en XML ou autres, pour l’importer rapidement dans l’analyse.

    PS : j’ai banni la jauge, elle multiplie le traitement par 3.

    A+.
    Cliquez pour agrandir...
    7
    ops! j'ai pas pu attendre j'ai testé ton apli sur mon fichier et j'ai u un message d'erreur !!:(

    Erreur à la ligne 75 du traitement Clic sur BTN_IMPORTER.
    Vous avez appelé la méthode Automation 'End'.
    Erreur 80010001

    ----- Informations techniques -----

    Projet : ImpXLS_XXL

    Appel WL :
    Traitement de 'Clic sur BTN_IMPORTER' (FEN_HOME.BTN_IMPORTER), ligne 75, thread 0

    Que s'est-il passé ?
    Vous avez appelé la méthode Automation 'End'.
    Erreur 80010001

    Code erreur : 2205
    Niveau : erreur fatale

    Dump de l'erreur du module 'wd220vm.dll' (22.0.318.0).
    Identifiant des informations détaillées (.err) : 130001
    Informations supplémentaires :
    EIT_PILEWL :
    Clic sur BTN_IMPORTER (FEN_HOME.BTN_IMPORTER), ligne 75
    EIT_DATEHEURE : 25/11/2018 22:31:09
    EIT_TYPE_WDFILE : <2>
    EIT_IDCODE : <18>
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Le code d’erreur correspond à un rejet de l’appel de la méthode "End".

    Soit tu as un problème sur l’activation d’Excel,
    soit Excel n’est pas le programme par défaut pour les XLSX,
    soit il y a un message à l’ouverture qui bloque le fonctionnement.

    Tu pourrais ouvrir Excel avec un fichier XLSX et voir s’il n’y a pas un message et le neutraliser.
    Tu pourrais aussi dans le code, mettre en commentaire cette ligne (26) pour voir s’il y a un message :
    Code (Text):
    autObjXLS>>Visible = OLEFaux
    A+.
     
    elhacene, WX1331 et joker aiment ça.
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Le code d’erreur correspond à un rejet de l’appel de la méthode "End".

    Soit tu as un problème sur l’activation d’Excel,
    soit Excel n’est pas le programme par défaut pour les XLSX,
    soit il y a un message à l’ouverture qui bloque le fonctionnement.

    Tu pourrais ouvrir Excel avec un fichier XLSX et voir s’il n’y a pas un message et le neutraliser.
    Tu pourrais aussi dans le code, mettre en commentaire cette ligne (26) pour voir s’il y a un message :
    Code (Text):
    autObjXLS>>Visible = OLEFaux
    A+.
    Cliquez pour agrandir...
    ok ta vu juste mon

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :hushedface::Dchapo, mon office avez effectivement un message d'activation en premier j'ai remédier a ça et ton code c'est avancé en exécution avec mon gros fichier :happyblush jusqu’à la ligne 152 , après avoir découpé 4 fichiers

    " erreur sur un nom de rubrique excel" message --> "
    Erreur à la ligne 152 du traitement Clic sur BTN_IMPORTER.
    Vous avez appelé la fonction HImporteXLS.
    <Nom_Gérant > n'est pas une syntaxe valide pour un nom de rubrique.

    ----- Informations techniques -----

    Projet : ImpXLS_XXL

    Appel WL :
    Traitement de 'Clic sur BTN_IMPORTER' (FEN_HOME.BTN_IMPORTER), ligne 152, thread 0
    Fonction 'HImporteXLS', syntaxe 3

    Que s'est-il passé ?
    <Nom_Gérant > n'est pas une syntaxe valide pour un nom de rubrique.

    Code erreur : 70220
    Niveau : erreur fatale
    Code erreur WD55 : 220

    Dump de l'erreur du module 'wd220hf.dll' (22.0.85.1).
    Identifiant des informations détaillées (.err) : 71016
    Informations de débogage :
    IEWDHF=15.8
    Module=<WDHF>
    Version=<22.0.85.1>
    Fonction (7,382)
    Informations supplémentaires :
    EIT_LOGICALTABLENAME : <FNF>
    EIT_PILEWL :
    Clic sur BTN_IMPORTER (FEN_HOME.BTN_IMPORTER), ligne 152
    EIT_DATEHEURE : 26/11/2018 17:27:26
    EIT_TYPE_WDFILE : <2>
    EIT_IDCODE : <18>

    Assistance"

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    mais j'ai testé sur un simple petit fichier et il a terminer l’exécution , la question que je me pose , il donne quoi comme résultat !! es qu'il me crée le fichier fic? car j'ai rien trouvé dans le dossier du programme :oops:
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Je n’avais pas pensé au nom invalide pour une rubrique FIC.
    Pour finir de valider avec cette version, il faut que tu enlèves les accents sur la première ligne de ton fichier Excel.

    Oui, normalement il y a bien un FIC à l’emplacement de l’exe,
    mais il y a un bug sur ta version avec les fichiers uniques (petit) que j’ai corrigé un peu plus tard.

    Si tu veux utiliser les fichiers de petite taille, il faut changer le traitement de l’import ligne 148 :
    Code (Text):
    SI nNumFichier = 0 ALORS
        LIB_INFO = "Intégration du fichier Excel dans la table"
        HImporteXLS(SAI_NOMTABLE, SAI_FICHIERXLS, nOngletXLS, "", hImpIgnorePremièreLigne) // , Jauge)
    SINON
    Le bug est sur le numéro de fichier qui reste à 0 et le fichier doit avoir son chemin.

    A+.
     
    joker et elhacene aiment ça.
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    ok j'ai enlevé les accent et meme une colonne qui n'avais pas d'accent et qui bugué le programme , résulta 26s mais pas trace de fichier fic!!!!!!!!!!!!:teary::'(.
    j'ai poussé le test en doublon les ligne et au plus 400000 et il bug la aussi au à la ligne 162. d'accord je donne ma langue au chat:closedtongue:. es que ta testé ton applique mon

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    es que t'a fait un test!?
     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Oui, j’ai fait beaucoup de tests, mais rarement avec un petit fichier.
    Tu as une erreur sur la ligne 162 : "duDurée = ChronoFin()" ???
    Je ne vois pas ce que tu as changé dans le code pour que cette action ne fonctionne plus.

    On ne va pas chercher les raisons, je vais plutôt te donner la dernière version,
    avec le traitement en dehors du tread principal pour avoir une jauge qui n’impacte pas sur le traitement :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Je n’ai pas encore inclu la gestion des noms avec les accents dans Excel.

    Exe + sources en WD 22 :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    A+.
     
  • Partager cette page

    Chargement...