Découper un fichier Word en OLE

Répondre
Côme
Site Admin
Messages : 855
Enregistré le : sam. sept. 14, 2002 10:41 pm
Localisation : Igny (Essonne)

Découper un fichier Word en OLE

Message par Côme » dim. oct. 07, 2018 1:13 am

Il ya 2 difficultés :

1/ Quand on crée un nouveau document vierge on se retrouve avec des styles différents du document initial et donc les copie de page n'ont pas le même rendu. J'ai résolu ce premier point en sauvegardant le document source comme un nouveau document puis en le vidant
2/ Quand on copie une sélection de pages, on se retrouve avec un saut de page en trop, sauf pour le dernier document.

Voici quelques bouts de code permettant d'y arriver :

Code : Tout sélectionner

wd est un objet OLE "Word.Application"
range est un objet Automation dynamique
 
// Ouvrir Word en mode invisible
wd>>Visible = OLEFaux
 
// ouvrir un document et se positionner
wd>>Documents>>Open(sFichier)
wd>>Browser>>Target(1)
 
// Enregistrer le document maître (pour conserver styles)
wd>>Application>>ChangeFileOpenDirectory(ComplèteRep(SAI_Rep_Sortie))
wd>>ActiveDocument>>SaveAs2(sNom,16)
 
// Effacer tout le contenu
wd>>Selection>>WholeStory
wd>>Selection>>Delete(1,1)
 
// Sélectionner le texte de telle page à telle page		
wd>>Selection>>GoTo(1,1,nPageDebut)
range = wd>>Selection>>Range()
wd>>Selection>>GoTo(1,1,nPageFin)
range>>End = wd>>Selection>>Bookmarks("\Page")>>Range>>End
range>>Select
 
// Copier la sélection	
wd>>Selection>>Copy()
 
// Repasser sur un autre document	
wd>>Documents(sNom)>>Activate
 
// Coller le presse papier
wd>>Selection>>Paste()
 
// Supprimer la dernière page d'un document	
wd>>Selection>>GoTo(1,1,SAI_NBrePage + 1)
range = wd>>Selection>>Range
wd>>Selection>>GoTo(1,1,SAI_NBrePage + 1)
range>>End = wd>>Selection>>Bookmarks("\Page")>>Range>>End
range>>Delete
wd>>Selection>>TypeBackspace
wd>>Selection>>TypeBackspace
 
// Sauvegarder un document (16 = format DocX)
wd>>Application>>ChangeFileOpenDirectory(ComplèteRep(SAI_Rep_Sortie))
wd>>ActiveDocument>>SaveAs2(sNom,16)	
 
// Fermer le document créé
wd>>ActiveWindow>>Close(Vrai)
 
// important car l'objet range a été créé dynamiquement
// il faut libérer la mémoire manuellement 	
libérer range	
 
// fermer et quitter
wd>>ActiveDocument>>close(OLEFaux)
wd>>Quit()

Répondre