PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2025 → OLE vers xlsDocument / HTML vers xlsDocument
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.