Parsing de fichier Excel on the fly

edriwing Messages postés 4 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 20 mai 2005 - 24 févr. 2005 à 14:31
edriwing Messages postés 4 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 20 mai 2005 - 20 mai 2005 à 12:14
Bonjour à vous,

Salut en particulier à Syndrael et Bastoun qui vont certainement me lire ;)

Voilà ma problèmatique :
- J'ai besoin d'accéder à des données issues de fichiers Excel, mais tout doit être automatisé.
CAD, entre autre, que je ne peux pas déclarer manuellement mes sources de donnée ODBC.
- Mon code doit fonctionner sous CF 4.0 (migration MX sous quelques mois, mais ce dev ne peut attendre)
- J'ai orienté mes recherches vers l'utilisation du tag cfobject. Je ne sais pas encore quel objet y associer, quelles méthodes lui sont associées, quels attributs, etc...

Si vous pouviez me donner des infos ou conseils qui me permettraient d'échapper aux longues heures de recherche...

Je suis ouvert à toute aide.

Evidemment, j'ai déjà lu les différents posts sur ce sujet ici même.
J'ai aussi essayé d'aller sur comet mais ils sont indispos pour le moment.

Merci.

Michaël

2 réponses

syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
26 févr. 2005 à 13:23
Monsieur Edriwing,

Bien le bonjour.. Ca faisait longtemps..

Tout dépend de la structure de ton fichier Excel, mais je te
conseillerais 'un peu à la volet' de déclarer une Source de données
exemple 'tmpXLS'.. Et ce fichier serait une copie de ton XLS à
consulter. Le CFObject peut être sympa mais je ne serai incapable après
des années d'abandon de cette commande te dire exactement comment
procéder. Appelle-moi et on se verra, y'a peut etre d'autres moyens
peut -etre plus radical si tu dois trouver un soluce temporaire..

Y'avait po de la poussière sur ton CF 4 ?? LOL !!

Ton site est toujours valable ??

S.
0
edriwing Messages postés 4 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 20 mai 2005
20 mai 2005 à 12:14
Salut, voici comment j'ai résolu mon problème, ça serbira peut être à d'autres.

1) utilisation d'un mx sur ma bécane de dev (mais mon code fonctionne peut être sur 4.0)
2) upload du fichier Excel en local
3) lecture du fichier via cfobject et l'objet Excel.Application
4) sauvegarde du fichier en .txt avec séparateurs tab et retour chariot
5) lecture du fichier .txt et mapping en passant en jouant avec les fonctions d'utilisation des tableaux et des listes (délimiteurs #chr(13)##chr(10)# et " ")

Défaut de la solution
Il faut ouvrir le fichier excel et le traiter manuellement pour virer tout retour chariot (alt + 0010) et toute tabulation en trop

Explications
Au début j'ai voulu accéder aux données en parsant les cellules du fichier Excel mais le temps de process se comptait en minutes.
J'ai donc contourné le problème grâce à l'étape 4 et en me tapant le défaut expliqué ci dessus.

Voici le code pour passer le fichier Excel d:\temp\toto.xls en d:\temp\toto.txt (1ère feuille du classeur Excel uniquement)

<cfset SaveAsCode = -4158><!--- Code pour fichier .txt --->

<CFTRY>
<CFOBJECT
ACTION="CONNECT"
CLASS="Excel.Application"
NAME="objExcel"
TYPE="COM">
<CFCATCH>
<CFOBJECT
ACTION="CREATE"
CLASS="Excel.Application"
NAME="objExcel"
TYPE="COM">
</CFCATCH>
</CFTRY>


<CFSET objBooks = objExcel.Workbooks>
<CFSET objBook = objBooks.Open("d:\temp\toto.xls")>
<CFSET objBook.Activate()>
<CFSET objExcel.DisplayAlerts = "NO">

<cfset objBook.SaveAs("d:\temp\toto.txt",#SaveAsCode#)>

<cfscript>
objBook.Close();
objExcel.Quit();
ReleaseComObject(objExcel);
</cfscript>

Ca n'a pas l'air bien compliqué, mais j'en ai chié à cause entre autre de cette foutue fenêtre de dialogue de confirmation qui n'apparait pas et qui me laissait des 10aines de process Excel en cours.


Amusez-vous bien


edriwing
0
Rejoignez-nous