[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
Bonjour,

Actuellement je fais des requetes (importation de fichier) dans excel qui vont lire et recuperer un fichier texte.
Or cela est beaucoup trop long (je suis en semi temps reel)

Est il possible de faire l'inverse c'est a dire suite a des batch dos qui cree mon fichier texte , est il possible de l'envoyer dans une cellule excel (fichier ouvert).

J'ai vu que l'on peut utiliser Spreadsheet-WriteExcel-2.20 mais je n'arrive pas l'installer (il faut dure que je n'ai jamais installé de librairie perl) et je ne sais pas si il sait ecrire sur un fichier excel deja ouvert.

mon fichier texte a cette tete
Machine 1

et mon but est de retrouver suite a un traitement par perl ou tout autre (sous console), la meme chose dans la celule A1 dans mon classeur ouvert

Peut etre par vb ?

Je ne suis pas tres bon en programmation a part les batch nt et un peu de perl..

Merci.!
A voir également:

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
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 ?
0
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
0
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
"> 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
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je vais regarder ton script . merci
0
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
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
0
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..
0
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
"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
0