| memomisation a partir d'un xls | |
|
|
Auteur | Message |
---|
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: memomisation a partir d'un xls Lun 5 Oct 2015 - 10:51 | |
| bjr a partir d'un fichier télécharge du web en format xls j'aimerais récupérer un nom prédéfini et le chiffre qui lui correspond c'est a dire celui qui est en bout de ligne juste avant la lettre H xxxx 2487 H comment je pourrais faire ça en arrière plant? voici le type de fichier | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 11:21 | |
| Pour cela, il faut qu'Excel soit installé sur ton ordinateur avec une licence valide. Alors, tu as 3 solutop,s:
1. Dans Panoramic, tu as les commandes EXCEL_xxx pour gérer un fichier xls. Tu peux ouvrir le fichier xls, lire en boucle la colonne B jusqu'à trouver la valeur que tu recherches, et lire ensuite la colonne E pour avoir la valeur. Faudrait vérifier si c'est bien la colonne B pour le nom que tu cherches - ce n'est pas évident à déterminer dans la capture que tu postes.
2. dans KGF.dll, tu as la section "Gestion de Excel (Office MicroSoft)". Tu peux y faire la même chose, de façon plus souple peut-être.
3. dans LGF.dll, tu as la section "Gestion de Excel/OpenCalc" qui te permet de faire la même chose. Avantage: si tu n'as pas Excel, tu peux installer OpenOffice, et ça marchera également ! | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 12:14 | |
| klaus j'ai un plantage de panoramic.exe - Code:
-
dim fic$, url$, res%, range$, content$, formula$, wb$
dll_on "kgf" fic$ = "c:\TourD Deluxe\test.xls" list 1 url$ = "http://www.ffjd.fr/CP/C_Classement_Joueurs_CP.php?Actifs_Licencies=0"
res% = DLL_call2("DownloadFile",adr(url$),adr(fic$))
res% = dll_call1("StartExcel",0) wb$ = "c:\TourD Deluxe\test.xls" res% = dll_call2("OpenExcelWorkBook",adr(wb$),1)
range$ = "B12" content$ = string$(255," ") formula$ = string$(255," ") res% = dll_call3("ReadExcelCell",adr(range$),adr(content$),adr(formula$)) content$ = trim$(content$)
item_add 1,content$ res% = dll_call0("TerminateExcel")
dll_off
regarde ce qui ne vas pas je trouve pas ce qu'il ce passe! merci | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 13:36 | |
| Chez moi, la fonction DownloadFile retourne 1 ce qui signifi "Erreur". L'URL n'est certainement pas bonne. Donc, le fichier n'est pas créé et la suite ne peut pas marcher. Ceci dit, chez moi, il n'y a pas de plantage. Faut dire que j'ai changé le chemin vers le fichier de destination: - Code:
-
url$ = "http://www.ffjd.fr/CP/C_Classement_Joueurs_CP.php?Actifs_Licencies=0" Vouloir placer cela directement sur C: est un peu brutal, et tu risques de te heurter à des problèmes de droit d'accès. | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 14:15 | |
| klaus l'url est valide j'ai refait des essais mais le plantage se fait quelque seconde après que le idem_add 1 s’exécute et je ne vois pas le problème voila apres le plantage PS : j'ai tout les droit d’accès sur mon disque dur même à la racine c: | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 14:19 | |
| Qu'est-ce qui se passe si tu termines ton programme comme ceci: - Code:
-
item_add 1,trim$(content$) : ' pour réduire la longue chaîne d'espaces à la fin... ' res% = dll_call0("TerminateExcel") : ' désactiver pour voir si le probème vient de là...
dll_off | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 14:36 | |
| ça ne se plante pas mais lorsque je ferme panoramic.exe il se plante
| |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 14:55 | |
| Ok. Je vais voir ça.
Je n'ai toujours pas pu télécharger ce fichier par Panoramic. Et lorsque je rentre cette URL dans mon browser, je tombr sur une page web, pas le téléchargement d'un fichier xls. Là, il y a un bouton oiur télécharger le fichier, et il arrive en format csv. Si j'ouvre le workbook avec ce fichier, il s'affiche bien dans Excel, le contenu de la cellule B12 est correctement inséré dans la liste, puis il y a un plantage sur CloseExcel. Je vais analyser le problème. | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 14:59 | |
| Ca y est - j'ai trouvé ! C'était plus rapide que je ne pensais.
En fait, suite à des tentatives infructueuses, d'autres instances de Excel.exe doivent encore traîner en mémoire. Regarde avec le gestionnaire des tâches, onglet "Détails" - tu verras certainement quelques Excel.exe qui traînent. Supprime-les tous, tu le programme marchera.
EDIT
Tu peux d'ailleurs tester si un Excel est en route, avec la fonction IsExcelRunning. | |
|
| |
Marc
Nombre de messages : 2397 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 16:55 | |
| Je pense que tu peux aussi réaliser une routine en pure Panoramic. Si je ne me trompes pas de fichier, il s'appelle "Liste_Complete_Joueurs_FFJD.csv" Pour les CVS, Panoramic possède tout ce qu'il faut. Voici un petit exemple sommaire : Pour tester : Il faut mettre le fichier CSV dans le répertoire de travail de Panoramic. Les boutons + et - permettent d'afficher la fiche suivante ou la précédente. Ceci pour montrer que l'on peut très facilement extraire ce que l'on veut et pourquoi pas, créer un nouveau fichier avec les champs que l'on souhaite. J'ai ajouté sur mon Webdav les fichiers .bas et .csv dans le répertoire "gestion CSV". - Code:
-
DIM i%, j% DIM Debut_Champ%, Fin_Champ% DIM position_dans_fiche% DIM Longueur_Champ% DIM fiche_joueur$ DIM entete$(16) DIM Fiche$(16) DIM Index% : ' Numéro de fiche affichée
LABEL Fiche_suivante LABEL Fiche_Precedente
Index% = 1
Affichage_Mask() Affichage_Ligne_entete() Affichage_fiche()
ON_CLICK 33, fiche_Suivante ON_CLICK 34, Fiche_Precedente
END
' ------------------------------------------------------------------------------ SUB Affichage_Mask()
FOR i% = 1 to 16 EDIT i% LEFT i%, 20 TOP i%, 10+(i%*25) NEXT i%
FOR i% = 17 to 32 EDIT i% LEFT i%, 200 TOP i%, 10+((i%-16)*25) NEXT i%
BUTTON 33 LEFT 33, 500 TOP 33, 250 CAPTION 33, "+ + +"
BUTTON 34 LEFT 34, 500 TOP 34, 400 CAPTION 34, "- - -"
EDIT 35 LEFT 35, 400 TOP 35, 50
END_SUB
' ------------------------------------------------------------------------------ SUB Ouverture_fichier()
FILE_OPEN_READ 1, "Liste_Complete_Joueurs_FFJD.csv"
END_SUB
' ------------------------------------------------------------------------------ SUB Affichage_Ligne_entete() FILE_OPEN_READ 1, "Liste_Complete_Joueurs_FFJD.csv" i% = 1 Debut_Champ% = 1 FILE_READLN 1, fiche_joueur$
FOR Debut_Champ% = 1 to LEN(Fiche_joueur$) Fin_Champ% = INSTR_POS(fiche_joueur$,";",Debut_Champ%) Longueur_Champ%= Fin_Champ% - Debut_Champ% IF Longueur_Champ% >0 entete$(i%)= mid$(fiche_joueur$,Debut_Champ%,Longueur_champ%) TEXT i%, entete$(i%) Debut_Champ% = Fin_champ% END_IF i% = i% + 1 NEXT Debut_Champ%
FILE_CLOSE 1 END_SUB
' ------------------------------------------------------------------------------
SUB Affichage_fiche() i% = 1 FILE_OPEN_READ 1, "Liste_Complete_Joueurs_FFJD.csv"
FOR j% = 1 to Index% Fiche_joueur$ = FILE_READLN$(1) NEXT j%
FOR Debut_Champ% = 1 to LEN(Fiche_joueur$) Fin_Champ% = INSTR_POS(fiche_joueur$,";",Debut_Champ%) Longueur_Champ%= Fin_Champ% - Debut_Champ% IF Longueur_Champ% >0 Fiche$(i%)= mid$(fiche_joueur$,Debut_Champ%,Longueur_champ%) TEXT i%+16, Fiche$(i%) Debut_Champ% = Fin_champ% END_IF i% = i% + 1 NEXT Debut_Champ%
FILE_CLOSE 1 TEXT 35, "fiche n° " + STR$(Index%) END_SUB
' ------------------------------------------------------------------------------ Fiche_Suivante:
Index% = Index% + 1 Affichage_Fiche()
RETURN
' ------------------------------------------------------------------------------ Fiche_Precedente:
Index% = Index% - 1 IF Index% < 1 THEN Index% = 1 Affichage_Fiche()
RETURN | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 19:30 | |
| oui c'est vrai que de temps en temps excel ne s'etein pas et ça marche mais plante tjr dès que je que je ferme panoramic même en rajoutant res% = dll_call0("CloseSpreadSheet") avant de fermer excel bon j'abandonne tant pis en fait c'etait pour mettre le nom dans un grid accompagner de son capital point | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 19:51 | |
| La fonction CloseSpreadSheet fait partie d'une autre série de fonctions (celles gérant de façon transparente Excel et Writer de OpenOffice), et elle ne peut pas être utilisée en même temps que les fonctions gérant Excel. Mais n'abandonne pas si vite ! Ton problème vient d'une fermeture d'Excel beaucoup trop rapide, après la lecture de la cellule. Il faut faire une petite attente, et ça marchera. Essaie ceci: télécharge le fichier CSV à partir de ce site (tu trouveras le lien par la première icône). Voici ce lien: www.ffjd.fr/CP/Export/Export.php?Cas=Complet&Type=csvEt maintenant, fais ceci: - Code:
-
dim fic$, url$, res%, range$, content$, formula$, wb$, points$
dll_on "kgf" list 1
res% = dll_call1("StartExcel",1) wb$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\Liste_Complete_Joueurs_FFJD.csv" : ' "c:\TourD Deluxe\test.xls" res% = dll_call2("OpenExcelWorkBook",adr(wb$),1)
range$ = "B11" content$ = string$(255," ") formula$ = string$(255," ") res% = dll_call3("ReadExcelCell",adr(range$),adr(content$),adr(formula$)) content$ = trim$(content$) range$ = "D11" points$ = string$(255," ") formula$ = string$(255," ") res% = dll_call3("ReadExcelCell",adr(range$),adr(points$),adr(formula$)) points$ = trim$(points$)
item_add 1,content$+" a "+points$+" points" pause 1000 : ' la durée de la pause est à ajuster selon les besoins res% = dll_call0("TerminateExcel")
dll_off
Evidemment, s tu arrives à charger le fichier XLS, ça marchera également, de la même manière ! Autre remarque: il faut ajuster le chemin dans la variable wb$ qui correspond à ma configuration. Mais ne place pas le fichier directement dans C:, mais plutôt dans un dossier genre C:\MonEssaiExcel\. | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 20:32 | |
| tjr pas résolut ooooooooooooooo et c'est pire qu'avant | |
|
| |
Marc
Nombre de messages : 2397 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: memomisation a partir d'un xls Lun 5 Oct 2015 - 22:29 | |
| Humm... Je reviens à la charge ! J'ai modifié mon source pour intégrer seulement les champs nécessaires dans un GRID. - Code:
-
DIM i%, j% DIM Debut_Champ%, Fin_Champ% DIM position_dans_fiche% DIM Longueur_Champ% DIM fiche_joueur$ DIM Fiche$(16)
grid 1 : HEIGHT 1, 400 : GRID_ROW 1, 5000
Affichage()
END ' ------------------------------------------------------------------------------
SUB Affichage()
FILE_OPEN_READ 1, "c:\Panoramic\Liste_Complete_Joueurs_FFJD.csv" J% = 1 WHILE FILE_EOF(1) <> 1 i% = 1 Fiche_joueur$ = FILE_READLN$(1) FOR Debut_Champ% = 1 to LEN(Fiche_joueur$) Fin_Champ% = INSTR_POS(fiche_joueur$,";",Debut_Champ%) Longueur_Champ%= Fin_Champ% - Debut_Champ% IF Longueur_Champ% >0 Fiche$(i%)= mid$(fiche_joueur$,Debut_Champ%,Longueur_champ%) Debut_Champ% = Fin_champ% END_IF i% = i% + 1 NEXT Debut_Champ%
GRID_WRITE 1, j%,2,Fiche$(2) GRID_WRITE 1, j%,3,Fiche$(3) GRID_WRITE 1, j%,4,Fiche$(4) J%=J%+1 PRINT_LOCATE 50, 420 PRINT "Intégration fiche n° " + STR$(J%) END_WHILE
PRINT_LOCATE 50, 420 PRINT "Intégration finie, tableau prêt !"
FILE_CLOSE 1
END_SUB
Voici le résultat : | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 0:10 | |
| Eh bien, c'est une belle réussite, et sans Excel ! | |
|
| |
Marc
Nombre de messages : 2397 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 1:57 | |
| Merci Klaus ! Je n'ai pas trop de mérite, c'était un fichier CSV. Mais je suis flatté d'avoir un compliment d'un des Maîtres de Panoramic ! Reste à savoir maintenant si ça peut convenir à Pascal. | |
|
| |
Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 7:50 | |
| J'utilise de temps a autres cette méthode. Je converti mes fichiers EXCEL en CSV. puis après il est facile de les manipuler en tableau avec GRID pour les afficher et les fonction de gestion pour charger le tableau. Simple et efficace. Bravo ! | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 9:53 | |
| bjr tout le monde
marc cela me convient dit moment que le programme soit en fond de tache
klaus j'ai encore travaillé sur mon source par n'importe quel moyen et rien n'y fait sa ce plante tjr j'ai aussi tenté a hiérarchisé en faisant ça jusque là c ok je n'ai pas de plantage mais dès que fin est exécute plantage!!!!
source: on_cose 0,fin end
fin: pause 1000 res% = dll_call0("TerminateExcel") dll_off terninate return
il me reste plus qu'a l'incorporer dans mon programe merci de votre aide | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 10:16 | |
| Tu peux mettre un pause 1000 juste après res% = dll_call0("TerminateExcel") Ca ne pourra pas faire de mal A priori, tu peux essayer de mettre un end après le terminate. Il ne sert à rien mais ça peut jouer à priori pour éviter les plantages dans certains cas. A tester... | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 11:30 | |
| Pourma part, je ferais come ceci: - Code:
-
fin: res% = dll_call0("TerminateExcel") pause 1000 dll_off terninate return Les manipulations d'Excel passent par le mécanisme COM de Windows. C'est un système un peu particulier, propre à Windows, et qui est basé sur un échange de messages entre un serveur (Excel) et un client (le programme Panoramic). Cela prend du temps, et la DLL n'a aucun moyen de savoir si l'exécution d'une commande est vraiment allée jusqu'au bout, dans la plupart des cas. Donc, il convient d'attendre un peu avant de "tuer" la DLL, après TerminateExcel. | |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 13:56 | |
| je vais adopté le source de marc pour l'évaluation de tourD merci encore | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 15:03 | |
| Juste pour un complément d'information, voici une version qui charge un fichier XLS de mon site internet et affiche le contenu dans un grid, le tout en 100 % Panoramic: - Code:
-
label start, close0
dim fic$, url$, res%, champ1$, champ2$, champ3$, range$, lig%, formule$
button 1 : top 1,10 : caption 1,"Start" : on_click 1,start grid 2 : top 2,40 : height 2,400 grid_column 2,4 grid_row 2,10
url$ = "http://klauspanoramic.olympe.in/versions/EssaiPilotage.xls" fic$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\EssaiPilotage.xls" on_close 0,close0 dll_on "KGF.dll" end
start: res% = dll_call2("DownloadFile",adr(url$),adr(fic$)) if res%<>0 message "Le téléchargement a échoué" return end_if
excel_start excel_file_open 1,fic$
lig% = 1 repeat lig% = lig% + 1 range$ = "A"+str$(lig%) formule$ = string$(255," ") champ1$ = string$(255," ") champ1$ = excel_read$(range$) champ1$ = trim$(champ1$) if champ1$="" lig% = 0 exit_repeat end_if champ2$ = string$(255," ") range$ = "B"+str$(lig%) champ2$ = excel_read$(range$) champ2$ = trim$(champ2$) champ3$ = string$(255," ") range$ = "C"+str$(lig%-1) champ3$ = excel_read$(range$) champ3$ = trim$(champ3$) grid_write 2,lig%,1,str$(lig%) grid_write 2,lig%,2,champ1$ grid_write 2,lig%,3,champ2$ grid_write 2,lig%,4,champ3$ until lig%=0 excel_file_close 1 excel_stop return
close0: res% = dll_call1("KillProcessByHandle",handle(0))
| |
|
| |
pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 20:10 | |
| | |
|
| |
Marc
Nombre de messages : 2397 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 22:15 | |
| Bonsoir à tous,
@Klaus : Je viens de tester ton dernier source, après avoir adapté le chemin du répertoire de travail (fic$) : il fonctionne parfaitement bien.
Il permet la récupération automatique du fichier sur Internet, ce qui évite une manipulation de téléchargement manuelle.
Merci ! | |
|
| |
Klaus
Nombre de messages : 12298 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: memomisation a partir d'un xls Mar 6 Oct 2015 - 22:23 | |
| | |
|
| |
Contenu sponsorisé
| Sujet: Re: memomisation a partir d'un xls | |
| |
|
| |
| memomisation a partir d'un xls | |
|