FORUMS PROFESSIONNELSWINDEV , WEBDEV et WINDEV Mobile
OLE vers xlsDocument / HTML vers xlsDocument
Débuté par Mathieu, 22 avr. 2025 16:37 - 1 réponse
Membre enregistré 4 messages
Posté le 22 avril 2025 - 16:37
Bonjour, j'ai ce code : Procedure OpenAllHtmlFiles( s Dossier est une chaîne , s FichierExcel est une chaîne ) SI PAS fFichierExiste ( s FichierExcel) ALORS ErreurAvecLog( 100 , "[OpenAllHtmlFiles] Le fichier Excel n'est pas accessible : " + s FichierExcel) RETOUR FIN arrFichiers est un tableau de chaînes = ListeHtmlFiles( s Dossier) SI Dimension ( arrFichiers) = 0 ALORS ErreurAvecLog( 100 , "[OpenAllHtmlFiles] Rien à afficher (aucun fichier HTML trouvé)" ) RETOUR FIN xlApp est un objet OLE dynamique = allouer objet automation "Excel.Application" SI ErreurDétectée ALORS ErreurAvecLog( 100 , "[OpenAllHtmlFiles] Impossible de lancer Excel en OLE Automation (OpenAllHtmlFiles)" ) RETOUR FIN xlApp> > Visible = Faux xlApp> > DisplayAlerts = Faux SI xlApp = Null ALORS ErreurAvecLog( 100 , "[OpenAllHtmlFiles] Impossible de démarrer Excel en mode invisible." ) RETOUR FIN finalWb est un objet OLE dynamique = xlApp> > Workbooks> > Open ( s FichierExcel) SI ErreurDétectée ALORS ErreurAvecLog( 100 , "[OpenAllHtmlFiles] Impossible d'ouvrir le fichier final (OpenAllHtmlFiles) : " + s FichierExcel) xlApp> > Quit( ) RETOUR FIN n NbFeuilles est un entier = finalWb> > Sheets> > Count tab Feuilles est un tableau associatif d' entiers POUR i = 1 À n NbFeuilles s NomFeuille est une chaîne = finalWb> > Sheets> > Item (i) > > Name tab Feuilles[ s NomFeuille] = iFIN POUR TOUT s FichierHtml de arrFichiers tempWb est un objet OLE dynamique = xlApp> > Workbooks> > Open ( s FichierHtml) s DateFeuille est une chaîne = ExtractDateFromFileName( s FichierHtml) SI tab Feuilles[ s DateFeuille] .. Existe ALORS n IndexFeuille est un entier = tab Feuilles[ s DateFeuille] finalWb> > Sheets> > Item ( n IndexFeuille) > > Activate( ) SI xlApp> > ActiveSheet> > Name < > s DateFeuille ALORS xlApp> > ActiveSheet> > Name = s DateFeuille FIN tempWs est un objet OLE dynamique = tempWb> > Sheets( 1 ) finalWs est un objet OLE dynamique = finalWb> > Sheets( s DateFeuille) n LigneB est un entier = finalWs> > C ells ( finalWs> > Rows> > Count , 2 ) > > END ( - 4162 ) > > Row n LigneD est un entier = finalWs> > C ells ( finalWs> > Rows> > Count , 4 ) > > END ( - 4162 ) > > Row n LigneF est un entier = finalWs> > C ells ( finalWs> > Rows> > Count , 6 ) > > END ( - 4162 ) > > Row n LigneDebut est un entier = Max ( n LigneB, n LigneD, n LigneF) + 2 ExtraireBootCatalogCorpsMail( finalWb, s DateFeuille, n LigneDebut, ChaîneVersDate ( s DateFeuille) ) iLigneDebutPremierTab est un entier = n LigneDebut + 4 tempWs> > Range( "A8:J13" ) > > C opy ( finalWs> > Range( "A" + iLigneDebutPremierTab) ) n DerniereLigneTmp est un entier = tempWs> > C ells ( tempWs> > Rows> > Count , 1 ) > > END ( - 4162 ) > > Row iLigneDebutDeuxiemeTab est un entier = iLigneDebutPremierTab + 7 tempWs> > Range( "A27:J" + n DerniereLigneTmp) > > C opy ( finalWs> > Range( "A" + iLigneDebutDeuxiemeTab) ) AppliquerFiltreSurColonneC( finalWs, iLigneDebutDeuxiemeTab) tempWb> > Close ( Faux ) tempWs = Null tempWb = Null FIN FIN POUR i = 1 _À_ finalWb> > Worksheets> > Count finalWb> > Worksheets(i) > > Activate finalWb> > ActiveSheet> > C olumns ( "A:M" ) > > AutoFit finalWb> > ActiveSheet> > Range( "B1:G1" ) > > Font> > Color = RVB ( 255 , 255 , 255 ) finalWb> > ActiveSheet> > Range( "B1:G1" ) > > Font> > Bold = True SI finalWb> > ActiveSheet> > Name = "Historique" ALORS finalWb> > ActiveSheet> > Range( "A1:B1" ) > > Font> > Color = RVB ( 255 , 255 , 255 ) finalWb> > ActiveSheet> > Range( "A1:B1" ) > > Font> > Bold = True FIN FIN finalWb> > Save( ) finalWb> > Close ( ) xlApp> > Quit( ) xlApp = Null finalWb = Null
Ce code fonctionne très bien lorsque je le lance à la main, seulement si il est exécuter automatiquement par une taches planifiés sur un serveur, cette ligne pose problème : finalWb est un objet OLE dynamique = xlApp> > Workbooks> > Open ( s FichierExcel)
Le serveur ne veut pas ouvrir le fichier (ce n'est pas un problème de privilèges). Et dans un autre code, j'utilise de la même manière des fichiers excels, seulement, j'utilise des type xlsDocument et je n'ai aucun soucis. Donc je pense que le plus simple serai de passer ce code avec les types xlsDocumment, seulement le problème, c'est que je n'ai trouvé aucune solution avec xlsDocument qui me permette de copier un fichier html sur excel comme me le permet le type OLE Automation. Car le but de ce code, est d'ouvrir un fichier html et de le copier dans un fichier excel. Pouvez-vous m'aidez ?
Membre enregistré 253 messages
Posté le 24 avril 2025 - 11:22
Bonjour, comme vous n'avez pas eu de réponse depuis 2 jours, j'ai posé la question à l'IA et voici ce qu'elle suggère (si cela peut vous aider)... Votre problème semble lié à l'utilisation d'OLE Automation pour manipuler Excel dans un environnement serveur. Voici quelques pistes pour résoudre votre souci : Problème avec OLE Automation : OLE Automation peut rencontrer des restrictions sur les serveurs, notamment en raison de limitations liées à l'exécution en arrière-plan ou à l'absence d'une interface utilisateur graphique. Cela pourrait expliquer pourquoi la ligne xlApp>>Workbooks>>Open(sFichierExcel) échoue. Utilisation de xlsDocument : Les types xlsDocument sont conçus pour manipuler des fichiers Excel de manière plus directe et sans dépendre d'Excel lui-même. Cependant, comme vous l'avez mentionné, ils ne permettent pas de copier directement des fichiers HTML dans Excel. Solution alternative : Une approche pourrait être de convertir les fichiers HTML en un format intermédiaire (comme CSV) avant de les importer dans Excel via xlsDocument. Cela éviterait les limitations d'OLE Automation tout en permettant de manipuler les données. Documentation et exemples : Consultez la documentation officielle de WINDEV pour des exemples sur l'utilisation de xlsDocument et des fonctions comme xlsAjouteFeuille ou xlsAjouteCellule. Cela pourrait vous aider à adapter votre code. Approche hybride : Si vous devez absolument utiliser OLE Automation pour certaines fonctionnalités, vous pourriez envisager de combiner les deux approches : utiliser xlsDocument pour les opérations principales et OLE Automation uniquement pour les tâches spécifiques comme la copie de fichiers HTML.