[EXCEL] Ecrire par batch console ,une data
Fermé
rikki
-
11 janv. 2008 à 14:28
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 - 11 janv. 2008 à 18:54
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 - 11 janv. 2008 à 18:54
A voir également:
- [EXCEL] Ecrire par batch console ,une data
- App data - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
- Fichier batch - Guide
8 réponses
phil232
Messages postés
607
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
178
11 janv. 2008 à 15:56
11 janv. 2008 à 15:56
primo : tu dis qu'il y a un soucis au niveau de la performance. tu ne vas pas remedier ça en ajoutant une couche Perl et une couche batch.
deuximo : sauf s'il y a une très bonne raison, est-il nécessaire d'importer tout un grand fichier (surtout en real time). Excel servirai à quoi à la fin ? cad quelle est cette raison ?
troisimo : Spreadsheet-WriteExcel-2.20 : ça veut dire Excel version 2.x ?
deuximo : sauf s'il y a une très bonne raison, est-il nécessaire d'importer tout un grand fichier (surtout en real time). Excel servirai à quoi à la fin ? cad quelle est cette raison ?
troisimo : Spreadsheet-WriteExcel-2.20 : ça veut dire Excel version 2.x ?
Bonjour
et merci pour ta reponse.
Mon flux d'entree vient dun fichier txt. Ce fichier txt est genéré par du perl et un autre programme.
Ensuite je traite ce fichier texte dans excel , qui effectue un rafraissement dune plage comportant une importation de données externes.
Or c'est sur cette requete qu'excel est particulierement lent.(>1 ou 2 secondes mais sur 1 petit fichier de quelques lignes)
L'idée serait donc di'écrire via perl ou vbs directement le contenu du fichier txt dans une celulle .ainsi je ne passe plus par le rafraichissement de la requete excel et jai quasi du temps réél. :-)
Un membre du forum lami20j, je crois , pour une autre info , m'avait indique, lors d'une discussion autre, le module perl Spreadsheet-WriteExcel-2.20
https://metacpan.org/pod/release/JMCNAMARA/Spreadsheet-WriteExcel-2.20/lib/Spreadsheet/WriteExcel.pm#INSTALLATION
mais je suis pas tres fortiche en perl , et je ne sais si c'ette application peut travailler sur un classeur ouvert
L'ideal pour moi serait donc de trouver un petit script vbs , wsh, ou perl qui puisse ecrire dans une cellule excel d'un classeur ouvert.
Ce classeur excel sert a transmettre a des ordres, le plus rapidement possible.
Or sur excel les requetes sur des importations de fichiers ne sont pas tres rapides et parfois plantent ..
SI tu as une idée .
grand Merci
et merci pour ta reponse.
Mon flux d'entree vient dun fichier txt. Ce fichier txt est genéré par du perl et un autre programme.
Ensuite je traite ce fichier texte dans excel , qui effectue un rafraissement dune plage comportant une importation de données externes.
Or c'est sur cette requete qu'excel est particulierement lent.(>1 ou 2 secondes mais sur 1 petit fichier de quelques lignes)
L'idée serait donc di'écrire via perl ou vbs directement le contenu du fichier txt dans une celulle .ainsi je ne passe plus par le rafraichissement de la requete excel et jai quasi du temps réél. :-)
Un membre du forum lami20j, je crois , pour une autre info , m'avait indique, lors d'une discussion autre, le module perl Spreadsheet-WriteExcel-2.20
https://metacpan.org/pod/release/JMCNAMARA/Spreadsheet-WriteExcel-2.20/lib/Spreadsheet/WriteExcel.pm#INSTALLATION
mais je suis pas tres fortiche en perl , et je ne sais si c'ette application peut travailler sur un classeur ouvert
L'ideal pour moi serait donc de trouver un petit script vbs , wsh, ou perl qui puisse ecrire dans une cellule excel d'un classeur ouvert.
Ce classeur excel sert a transmettre a des ordres, le plus rapidement possible.
Or sur excel les requetes sur des importations de fichiers ne sont pas tres rapides et parfois plantent ..
SI tu as une idée .
grand Merci
phil232
Messages postés
607
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
178
11 janv. 2008 à 17:40
11 janv. 2008 à 17:40
"> 1 ou 2 secondes mais sur 1 petit fichier de quelques lignes", qq chose ne va pas là. je croyais plusieurs mille. mais tu dis "requête". est tu sérieux ? une requête puor lire un fichier texte ? un importe n'irais pas ?
et puis tu veux écrire dans UNE SEULE cellule ? là, effectivement un script se propose. mais d'un autre coté : que diable fait on avec une seule donnée dans Excel - une feuille de calcul ? j'ai un peu l'impression que le design de cette fabrique à gaz merde un peu.
"Ce classeur excel sert a transmettre a des ordres, le plus rapidement possible"
le plus rapidement possible c'est quand les gens de la vente se connecte diorectement sur la base de données. ici, il me semble qu'on a trouvé une solution très enterprisy (genre on tapes la commande sur l'ordi, l'imprime, la place sur une table en bois, la scanne, la passe par un OCR, la sauve comme fichier txt, puis on l'envoye par email)
http://www.theDailyWTF.com
"Or sur excel les requetes sur des importations de fichiers ne sont pas tres rapides et parfois plantent", au contraire, c'est un de mes outils préféré pour faire vite un import/export de 20 à 30.000 ligne en qq secondes. Franchement qq chose merde. ou bien le fichier texte se trouve sur le réseau auquel tu est attaché avec un modem 2400 baud.
2 "soluces" : tu écrit un WSH ou VBS (à la fin c'est la même chose) en espérant que la donnée va toujours aller dans la même case ou bien tu regarde un peu le processus du début (je m'imagine que le fichier généré contient des données d'une base de données, ou serait ce du genre une page web avec nom, prénom, etc. et un bouton submit) pour REELEMENT accelerer le processus
pour le script
https://www.microsoft.com/en-us/download/details.aspx?id=55979
et puis tu veux écrire dans UNE SEULE cellule ? là, effectivement un script se propose. mais d'un autre coté : que diable fait on avec une seule donnée dans Excel - une feuille de calcul ? j'ai un peu l'impression que le design de cette fabrique à gaz merde un peu.
"Ce classeur excel sert a transmettre a des ordres, le plus rapidement possible"
le plus rapidement possible c'est quand les gens de la vente se connecte diorectement sur la base de données. ici, il me semble qu'on a trouvé une solution très enterprisy (genre on tapes la commande sur l'ordi, l'imprime, la place sur une table en bois, la scanne, la passe par un OCR, la sauve comme fichier txt, puis on l'envoye par email)
http://www.theDailyWTF.com
"Or sur excel les requetes sur des importations de fichiers ne sont pas tres rapides et parfois plantent", au contraire, c'est un de mes outils préféré pour faire vite un import/export de 20 à 30.000 ligne en qq secondes. Franchement qq chose merde. ou bien le fichier texte se trouve sur le réseau auquel tu est attaché avec un modem 2400 baud.
2 "soluces" : tu écrit un WSH ou VBS (à la fin c'est la même chose) en espérant que la donnée va toujours aller dans la même case ou bien tu regarde un peu le processus du début (je m'imagine que le fichier généré contient des données d'une base de données, ou serait ce du genre une page web avec nom, prénom, etc. et un bouton submit) pour REELEMENT accelerer le processus
pour le script
https://www.microsoft.com/en-us/download/details.aspx?id=55979
Non pHil..
Le probleme ne vient pas dans la longueur du texte a importer, mais lors de l'acces a cette requete.
Une fois la connexion faite cest tres rapide..je suis bien d'accord
Le probleme est tres simple.
Dnas mon excel jai un timer qui rafraichit cette requete toutes les secondes .
Or a cause de cette requete celle ci ne se fait pas en 1 seconde mais du coup repousse mon timer a 2 secondes..et les consequences qui en decoulent.Mon timer servant a controler d'autres macros.
Or si je peux inscrire directement par fichier batch les données dans une celulle , je m'evite de rafraichissement de requete qui bouscule mon timer..
Le bouton submit est aussi a exclure car c'ets une application en semi temps reel sans intervention humaine.
Jai bien pense a passer par l'intermediaire dune bdd puis via sql.request mais je ne sais pas si j'y gagne en performance et c'est encore plus uen usine a gaz..
Par contre cela peut m'eviter d'avoir des fichiers lockés.
sinon et oui il arrive que les acces de requete parfois plantent ..soit parce que le fichier source est loqué ou non present..
il m'arrive souvent a l'epoque d'avoir un arret des macros sur la ligne..
selectionb.querytable.refresh BackgroundQuery:=False
Donc si je pouvais simplement ecrire mes datas (qui sont tres simples) par batch vbs ou perl dans une celule au lieu de passer par une requete ce serait ideal, voir merveilleux !
peut etre pas perl ole, objetcom , mais la c'es audesus de mes compétences deja bien maigres
Le probleme ne vient pas dans la longueur du texte a importer, mais lors de l'acces a cette requete.
Une fois la connexion faite cest tres rapide..je suis bien d'accord
Le probleme est tres simple.
Dnas mon excel jai un timer qui rafraichit cette requete toutes les secondes .
Or a cause de cette requete celle ci ne se fait pas en 1 seconde mais du coup repousse mon timer a 2 secondes..et les consequences qui en decoulent.Mon timer servant a controler d'autres macros.
Or si je peux inscrire directement par fichier batch les données dans une celulle , je m'evite de rafraichissement de requete qui bouscule mon timer..
Le bouton submit est aussi a exclure car c'ets une application en semi temps reel sans intervention humaine.
Jai bien pense a passer par l'intermediaire dune bdd puis via sql.request mais je ne sais pas si j'y gagne en performance et c'est encore plus uen usine a gaz..
Par contre cela peut m'eviter d'avoir des fichiers lockés.
sinon et oui il arrive que les acces de requete parfois plantent ..soit parce que le fichier source est loqué ou non present..
il m'arrive souvent a l'epoque d'avoir un arret des macros sur la ligne..
selectionb.querytable.refresh BackgroundQuery:=False
Donc si je pouvais simplement ecrire mes datas (qui sont tres simples) par batch vbs ou perl dans une celule au lieu de passer par une requete ce serait ideal, voir merveilleux !
peut etre pas perl ole, objetcom , mais la c'es audesus de mes compétences deja bien maigres
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
phil232
Messages postés
607
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
178
11 janv. 2008 à 18:09
11 janv. 2008 à 18:09
ne serait-ce plus simple de laisser la connection ouvverte et de la fermer une fois qu'on ferme Excel ?
je suppose un truc comme ça
sub xyz
dim cn as ADO.Connection
set cn = ...
''' faire import
set cn = Nothing
end sub
au lieu de ça tu mets ça dans l'évenement d'ouverture
dim cn as ADO.Connection
set cn = ...
et à la fermeture
set cn = Nothing
je suppose un truc comme ça
sub xyz
dim cn as ADO.Connection
set cn = ...
''' faire import
set cn = Nothing
end sub
au lieu de ça tu mets ça dans l'évenement d'ouverture
dim cn as ADO.Connection
set cn = ...
et à la fermeture
set cn = Nothing
SI tu le dis :-)
Ce qui est sur c'est que ma source est un fichier texte qui varie tous les 1/4 de seconde ..et ca je ne peux le changer..
si on laisse une connection ouverte, je la relance sans jamais la fermer c'est ca?
si tu pouvais me donner un petit exemple avec un fichier entree.txt cela m'aiderait beaucoup ..thx .car niveau programmation , je fais avec les moyens du bord tres limités , n'etant pas programmeur.. :-)..
Ce qui est dingue, ou me rend un peu fou, c'est que je peux batcher des trucs qui ont des temps d'accés de moins de 200 ms et qu'excel met un certain temps pour lire un fichier contenant une malheureuse ligne...
J'ai meme eu , mais la je divague, des fichiers txt de 50000 lignes ou la c'etait l'enfer, lors de l'import sans qu'on comprenne pourquoi (parfois la minute) et ce que calcule excel dans ces moments là.. ..A croire que lors de ces imports il verifie je ne sais quoi, SURTOUT, si des lignes accolés a la zone de l'import s'en servent pour faire dautres calculs .. Alors qu'avec un copier coller , des memes datas, le tour est joué en moins d'une seconde..enfin bref ..la c'est une autre probleme..
Ce qui est sur c'est que ma source est un fichier texte qui varie tous les 1/4 de seconde ..et ca je ne peux le changer..
si on laisse une connection ouverte, je la relance sans jamais la fermer c'est ca?
si tu pouvais me donner un petit exemple avec un fichier entree.txt cela m'aiderait beaucoup ..thx .car niveau programmation , je fais avec les moyens du bord tres limités , n'etant pas programmeur.. :-)..
Ce qui est dingue, ou me rend un peu fou, c'est que je peux batcher des trucs qui ont des temps d'accés de moins de 200 ms et qu'excel met un certain temps pour lire un fichier contenant une malheureuse ligne...
J'ai meme eu , mais la je divague, des fichiers txt de 50000 lignes ou la c'etait l'enfer, lors de l'import sans qu'on comprenne pourquoi (parfois la minute) et ce que calcule excel dans ces moments là.. ..A croire que lors de ces imports il verifie je ne sais quoi, SURTOUT, si des lignes accolés a la zone de l'import s'en servent pour faire dautres calculs .. Alors qu'avec un copier coller , des memes datas, le tour est joué en moins d'une seconde..enfin bref ..la c'est une autre probleme..
phil232
Messages postés
607
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
31 janvier 2008
178
11 janv. 2008 à 18:54
11 janv. 2008 à 18:54
"si on laisse une connection ouverte, je la relance sans jamais la fermer c'est ca?", non, seulement si tu la mets dans la sub du timer. si tu ouvre la connection à l'ouverture d'Excel et la ferme à la fin d'Excel c'est suffisant. ne te laisse pas racconter que c'est mauvais de la laisser ouverte. t'en a besoin tout le temps donc c'est la seule façon.
"qu'excel met un certain temps pour lire un fichier contenant ", non, t'as déjà bien trouvé que c'est la connection, pas Excel, j'aurais du y penser déjà au début. c'est pourquoi il faut la laisser ouverte.
J'ai meme eu , mais la je divague, des fichiers txt de 50000 lignes ou la c'etait l'enfer, lors de l'import sans qu'on comprenne pourquoi (parfois la minute) et ce que calcule excel dans ces moments là.. ..A croire que lors de ces imports il verifie je ne sais quoi, SURTOUT, si des lignes accolés a la zone de l'import s'en servent pour faire dautres calculs .. Alors qu'avec un copier coller , des memes datas, le tour est joué en moins d'une seconde..enfin bref ..la c'est une autre probleme..
connaissant MS, c'est bien ça. mais bon, que veux tu qu'Excel fasse ? c'est quand-même son boulot (on pourrais sugérer une option pour arreter ça mais c'est aussi seulement un aspect car il y a le formattage, la detection du type de données, formattage des dates, etc, etc)
je dois rentrer mais l'evenement c'est
Private Sub Workbook_Open()
dim cn as ADO.Connection
set cn = ...
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
set cn = Nothing
End Sub
"qu'excel met un certain temps pour lire un fichier contenant ", non, t'as déjà bien trouvé que c'est la connection, pas Excel, j'aurais du y penser déjà au début. c'est pourquoi il faut la laisser ouverte.
J'ai meme eu , mais la je divague, des fichiers txt de 50000 lignes ou la c'etait l'enfer, lors de l'import sans qu'on comprenne pourquoi (parfois la minute) et ce que calcule excel dans ces moments là.. ..A croire que lors de ces imports il verifie je ne sais quoi, SURTOUT, si des lignes accolés a la zone de l'import s'en servent pour faire dautres calculs .. Alors qu'avec un copier coller , des memes datas, le tour est joué en moins d'une seconde..enfin bref ..la c'est une autre probleme..
connaissant MS, c'est bien ça. mais bon, que veux tu qu'Excel fasse ? c'est quand-même son boulot (on pourrais sugérer une option pour arreter ça mais c'est aussi seulement un aspect car il y a le formattage, la detection du type de données, formattage des dates, etc, etc)
je dois rentrer mais l'evenement c'est
Private Sub Workbook_Open()
dim cn as ADO.Connection
set cn = ...
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
set cn = Nothing
End Sub