|
OLE vers xlsDocument / HTML vers xlsDocument |
Iniciado por Mathieu, abr., 22 2025 4:37 PM - 1 resposta |
| |
| | | |
|
| |
Membro registado 4 mensagems |
|
Publicado em abril, 22 2025 - 4:37 PM |
Bonjour, j'ai ce code :
Procedure OpenAllHtmlFiles(sDossier est une chaîne, sFichierExcel est une chaîne)
SI PAS fFichierExiste(sFichierExcel) ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Le fichier Excel n'est pas accessible : " + sFichierExcel) RETOUR FIN
arrFichiers est un tableau de chaînes = ListeHtmlFiles(sDossier) 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(sFichierExcel) SI ErreurDétectée ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Impossible d'ouvrir le fichier final (OpenAllHtmlFiles) : " + sFichierExcel) xlApp>>Quit() RETOUR FIN nNbFeuilles est un entier = finalWb>>Sheets>>Count tabFeuilles est un tableau associatif d'entiers
POUR i = 1 À nNbFeuilles sNomFeuille est une chaîne = finalWb>>Sheets>>Item(i)>>Name tabFeuilles[sNomFeuille] = i FIN
POUR TOUT sFichierHtml de arrFichiers tempWb est un objet OLE dynamique = xlApp>>Workbooks>>Open(sFichierHtml) sDateFeuille est une chaîne = ExtractDateFromFileName(sFichierHtml)
SI tabFeuilles[sDateFeuille]..Existe ALORS nIndexFeuille est un entier = tabFeuilles[sDateFeuille] finalWb>>Sheets>>Item(nIndexFeuille)>>Activate()
SI xlApp>>ActiveSheet>>Name <> sDateFeuille ALORS xlApp>>ActiveSheet>>Name = sDateFeuille FIN
tempWs est un objet OLE dynamique = tempWb>>Sheets(1) finalWs est un objet OLE dynamique = finalWb>>Sheets(sDateFeuille)
nLigneB est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 2)>>END(-4162)>>Row nLigneD est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 4)>>END(-4162)>>Row nLigneF est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 6)>>END(-4162)>>Row
nLigneDebut est un entier = Max(nLigneB, nLigneD, nLigneF) + 2
ExtraireBootCatalogCorpsMail(finalWb, sDateFeuille, nLigneDebut, ChaîneVersDate(sDateFeuille))
iLigneDebutPremierTab est un entier = nLigneDebut + 4 tempWs>>Range("A8:J13")>>Copy(finalWs>>Range("A" + iLigneDebutPremierTab))
nDerniereLigneTmp est un entier = tempWs>>Cells(tempWs>>Rows>>Count, 1)>>END(-4162)>>Row iLigneDebutDeuxiemeTab est un entier = iLigneDebutPremierTab + 7 tempWs>>Range("A27:J" + nDerniereLigneTmp)>>Copy(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>>Columns("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(sFichierExcel)
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 ? |
| |
| |
| | | |
|
| | |
| |
Membro registado 253 mensagems |
|
Publicado em abril, 24 2025 - 11:22 AM |
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. |
| |
| |
| | | |
|
| | | | |
| | |
|