PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → [WD15] xlsOuvre met du temps a s'executer (excel 5000 lignes)
[WD15] xlsOuvre met du temps a s'executer (excel 5000 lignes)
Débuté par Marcel, 19 mai 2010 15:48 - 7 réponses
Posté le 19 mai 2010 - 15:48
Bonjour
J’utilise la fonction xlsOuvre pour ouvrir un fichier Excel (version 2003 ou 2007) contenant 5000 lignes d’enregistrements. Le problème est que cette fonction met du temps a se réaliser.
Alors est ce que quelqu’un peut me dire comment accélérer cette l’exécution de cette fonction.
J’ai effectué des tests avec 1000 et 2000 lignes et le résultat est immédiat. J’ai déjà aussi testé la fonction xlsOuvre avec 10 000 lignes et 40 000 lignes et l’application a carrément planté avec 100% d’utilisation du processeur dans la gestionnaire d etâche de Windows.
Alors j’aimerai avoir des explications pourquoi cette fonction plante et si vous avez des solutions, merci d’avance.
Cordialement, Marcel

mail : manutsar@yahoo.fr
Posté le 19 mai 2010 - 17:29
Salut Marcel,

tu peux donner plus de précision sur ton fichier excel ( taille , nb de colonnes remplies) et sur ta config ( XP ? taille mémoire vive ? version de windev ? )
chez moi un fichier excel de 15000 lignes de taille 1,5 Mo s'ouvre sans problème ( WD15)

Ami calmant, J.P ;-)
Posté le 19 mai 2010 - 19:05
Bonjour,

Je viens d'effectuer un test avec un fichier xls de 39000 lignes 4 colonnes
Aucun problème d'ouverture
Temps d'exécution pour le remplissage d'une table 22s 673 ms

Cdt

Albert
Posté le 20 mai 2010 - 09:47
le teste que j'ai effectué est un fichier excel de 900ko avec 5000 lignes et 5 colonnes. l'importation des lignes vers une table mémoire ne dure que 6 secondes. mais mon problème est que, la fonction xlsouvre met 4 secondes pour s'exécuter alors j'aimerai savoir s'il a des moyens d'accélérer l'exécution de cette fonction.

je viens de faire un test à l'instant même avec un fichier de 5 colonnes et 10000 lignes pesant 540ko. voici le résultant de mon chronomètre :
- l'exécution du code suivant dure 20secondes.
//ouverture du fichier
gnFichierID=xlsOuvre(gsNomFichier,xlsEcriture)
- l'importation des lignes vers une table mémoire dure 17 secondes.

mon problème est que pourquoi l'ouverture d'un fichier excel met du temps a s'exécuter alors que je ne lit même pas une ligne. je pense que c'est pas logique.

alors est que quelqu'un peut me donner des explications.
Posté le 18 juin 2010 - 15:34
Je n'ai pas de réponse au problème, mais j'ai constaté ce qui suit:
j'ai un programme en WD11 avec lequel je dois lire un fichier xls de 30Mo!
(20 feuilles dont la première compte 132 colonnes et 2300 lignes).
J'ai fait des tests en différentes version WD et en utilisant soit les fonctions XLSxxxx(), soit une classe cExcel.

En V11:
Temps d'ouverture du fichier XLSOuvre() : 6s
Temps d'ouverture du fichier classe cExcle:ouvrir(): 6s

Tps de lecture Feuille1 et alim table mémoire (avec les fonctions XLSxxxx()) : 30s
Tps de lecture Feuille1 et alim table mémoire (avec la classe cExcel) : 12s

Voulant améliorer les perf de cet import, j'ai test en WD14 et WD15:
XLSOuvre plante le programme (j'ai tué la tâche an bout de 5mn)

je reste donc en WD11 pour cet import, j'essayerai de mettre de belles animations pour faire patienter mes clients :D
Posté le 18 juin 2010 - 18:47
Bonjour,

en fait vous pouvez retrouver le mode de fonctionnement de WD12 et précédent en indiquant : xlsCompatible dans le mode d'ouverture de XLSOuvre().

Lors de l'utilisation de xlsDocuement, je confirme que le délai d'ouverture est très très long sur de gros fichiers.

Avez-vous contacté le Support Technique à ce sujet ??

Pour faire des imports de fichiers Excel, j'utilise depuis longtemps le driver Excel (disponible via ODBC ou OLE) : c'est très performant mais moins souple que les fonctions XLS de WD. L'accès se fait en lecture au moyen de SELECT ... avec une syntaxe un peu particulière parfois.

A+
Posté le 21 juin 2010 - 11:06
Merci pour l'info Olivier, mais je la lis un peu tard, j'ai terminé mon import ce WE. Du coup j'ai utilisé la méthode suivante:

Création d'un fichier txt par feuille excel en utilisant la syntaxe suivante:
:m_xExcel>>ActiveWorkbook>>SaveAs(sFileName,0x00000014)

puis lecture des fichier et extraction des données en utilisant ExtraitChaine()

++
Posté le 23 septembre 2010 - 15:50
Hello,

voici les suites du cas :

j'ai pu isoler le problème dans un projet exemple que j'ai transmis au Support Technique et qui a ouvert un incident (64703).
Le problème est une consommation excessive de RAM et une lenteur assez importante lors de l'ouverture d'un fichier Excel (qu'il soit .xls ou .xlsx).

Les données brutes du test faisait 14 Mo (un peu moins de 100'000 lignes).
Ouverture des fichiers : environ 3 min sur ma machine (Xeon avec 6 Go de RAM, Win 7 64 bits).
Consommation de RAM (en 32 bits) :
- .xls ~= 230 Mo
- .xlsx ~= 790 Mo
Le 2 fichiers sont les mêmes (mêmes données) sauf pour le format.

Toujours pas de correctif malgré plusieurs relances.

En l'état actuel, il faut une sacré quantité de mémoire (et du temps...) pour traiter des fichiers Excel important. Si le PC sur lequel vous faites le traitement n'a pas beaucoup de mémoire, vous utiliserez le disque et metterez le PC "à genoux". C'est encore pire si l'application est compilée en 64 bits...
On est donc très loin des 1 million de lignes annoncées pour WD15.

Voilà si ça peut vous éviter de vous casser les dents sur ce problème, en attendant sa résolution.

Si vous voulez d'autres détails ou le projet exemple, contactez-moi.

Bon dev,

Olivier