Page 1 sur 1
[R] Word Modeles et compléments
Posté : mer. 30 juil. 2014 15:55
par jcaspar
B
onjour à tous !
Mon réseau comporte une multitude de fichiers Word comportant
des liaisons modeles et compléments
vers des fichiers modeles inexistants ... ce qui rend l'ouverture de ces fichiers extrèment longue ..voir impossible.
Croyez vous qu'il serait possible de déterminer les fichiers word ayant des liaisons ? Je suis un peu perplexe
mais on ne sais jamais ... avec autoit même l'impossible devient posssible !
En vous remerciant pour vos idées et conseils

!
Jean-Marc
Re: [..] Word Modeles et compléments
Posté : lun. 04 août 2014 14:09
par jcaspar
B

onjour à tous !
Je crois que j'ai trouvé une idée à creuser ... lorsque que l'on fait un clic droit sur un fichier portant l'extension
docx plusieurs informations s'affichent dont celle qui m'intéresse
liens brisés
en fait il faudrait pouvoir récupérer cette information ....
(Apres verification cette information ne semble pas correspondre à un modele, ni à un lien hypertexte) ...
Peut être avez vous des idées à me sugèrées ?
Je vous remercie pour vos précisions et vos idées
Jean-Marc
Re: [..] Word Modeles et compléments
Posté : lun. 04 août 2014 16:02
par orax
• On pourrait récupérer les modèles avec peut-être ça :
http://msdn.microsoft.com/en-us/library ... 14%29.aspx
Ou mieux :
Document.AttachedTemplate Property (Word)
• Une autre solution, en dernier recours :
décompresser le fichier Word (les
docx sont des ZIP) ;
récupérer tous les liens dans le(s) fichier(s) XML correspondant ;
vérifier si le fichier lié existe.
Ce sont des fichiers Word 2010 ?
[M] Word Modeles et compléments
Posté : lun. 04 août 2014 18:04
par jcaspar
M

erci pour vos réponses et vos conseils !
Les fichiers dans mon réseaux sont un mix de fichiers avec extension.doc et extension.docx
Les versions sont Word2003 et Word 2007 ( Majoritairement )
Re: [..] Word Modeles et compléments
Posté : lun. 04 août 2014 22:08
par orax
J'ai Word 2010 donc j'ai pu faire quelques tests. Je pense qu'il y aura possibilité de trouver et même de modifier les fichiers dont les liens sont brisés.
► Afficher le texte
Code : Tout sélectionner
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
$fichier = 'c:\temp\a.docx' ; à changer !
_DebugSetup('', False, 2)
Local $oWordApp = _Word_Create()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oDocument = _Word_DocOpen($oWordApp, $fichier)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error opening " & $fichier & @CRLF & "error = " & @error & ", @extended = " & @extended)
;
; Modèles
;
_DebugOut($oDocument.AttachedTemplate.Name)
_DebugOut($oDocument.AttachedTemplate.FullName)
If Not FileExists($oDocument.AttachedTemplate.FullName) Then
;~ $oDocument.AttachedTemplate = 'C:\...on peut entrer ici un nouveau chemin vers un modèle existant'
EndIf
_DebugOut('')
_DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($template.Name)
_DebugOut($template.FullName)
_DebugOut('')
; If Not FileExists(...
Next
;
; Compléments
;
_DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
_DebugOut($addIns.Name)
_DebugOut($addIns.Path)
_DebugOut($addIns.Installed)
_DebugOut('')
; If Not FileExists(...
Next
#CS
; Pour sauver le document, notamment si le modèle ou complément a été changé.
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
#CE
[M] Word Modeles et compléments
Posté : mar. 05 août 2014 12:05
par jcaspar
Merci beaucoup pour le script et les informations !
Apparement cela devrait également fonctionner pour les versions plus anciennes
http://msdn.microsoft.com/en-us/library ... e.12).aspx
http://msdn.microsoft.com/en-us/library ... e.11).aspx
Je vais examiner le script de pres et voir comment l'utiliser au mieux
Re: [..] Word Modeles et compléments
Posté : mar. 05 août 2014 14:34
par jcaspar
POurriez vous svp m'expliquer comment convertir les exemples de code ci dessous en autoit ? Afin que je puisse progresser dans ma compréhension de la manipulation des objets com ?
Voici les informations trouvées sur le site MSDN
http://msdn.microsoft.com/en-us/library ... e.11).aspx
Si je comprends bien j'utilise la methode $obj1=objcreate( word.document)
ensuite j'appel l'objet AttachedTemplate avec la syntaxe suivante
Code : Tout sélectionner
$Appleobj1=$obj1.ActiveDocument.AttachedTemplate = "C:\Templates\Letter.dot"
$Appelobj2=$obj1.ActiveDocument.AttachedTemplate.FullName
Re: [..] Word Modeles et compléments
Posté : mar. 05 août 2014 19:28
par orax
Ces exemples sont bons. Par contre il est préférable d'utiliser cette page
http://msdn.microsoft.com/en-us/library ... 14%29.aspx pour pouvoir naviguer dans la liste à gauche.
Un détail : j'avais utilisé
_Word_Create() au lieu de faire
objcreate(word.document), mais
objcreate( word.document) est appelé dans
_Word_Create() donc ça en revient un peu au même.
Re: [..] Word Modeles et compléments
Posté : mer. 06 août 2014 10:45
par jcaspar
B
onjour à tous !
Merci pour les réponses précédentes !
J'aurais encore besoin d'un peu d'aide pour parvenir à mes fins .... je parviens à lister les fichiers d'un dossier avec l'extension adéquate et à afficher le contenu du listing ... à présent il faudrait que le traitement soit effectué sur l'ensemble des fichiers du dossier ... $aFileList étant un tableau je pensais créer une fonction et transmettre en parametre la valeur correspondant au path du fichier... mais je coince pourriez vous svp m'expliquer comment je devrais m'y prendre ?
Il semble qu'une boucle for devrait permettre d'y parvenir mais je ne vois pas comment récupérer chaque information et ainsi executer la procédure pour chaque fichier
En vous remerciant pour vos conseils
Jean-Marc
► Afficher le texte
Code : Tout sélectionner
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
#include <File.au3>
#include <Array.au3>
Local $iMax,$contenu
; Lister les fichiers à vérifier du dossier
;~ "p:\SG\INFOR
Local $aFileList = _FileListToArray("h:\", "*.docx")
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Chemin incorrect.")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Aucun fichier(s) n'ont été trouvés.")
Exit
EndIf
; Display the results returned by _FileListToArray.
_ArrayDisplay($aFileList, "Fichiers du dossier")
For $i in $aFileList
$contenu=$contenu & $i &@crlf
ConsoleWrite($contenu&@crlf)
Next
; appel de la fonction modeles
modeles($contenu)
; methode permettant de lister les modeles
func modeles ($contenu)
$fichier ="d:\reglementfunerai.doc"; à changer !
_DebugSetup('', False, 2)
Local $oWordApp = _Word_Create()
$oWordApp2=$oWordApp.AttachedTemplate.FullName
msgbox(48,"Info",$oWordApp2)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oDocument = _Word_DocOpen($oWordApp, $fichier)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error opening " & $fichier & @CRLF & "error = " & @error & ", @extended = " & @extended)
;
; Modèles
;~ $oWordApp.AttachedTemplate="c:\Templates\Letter.dot"
;
Local $tableau[2][2]
$tableau[0][0]=$oDocument.AttachedTemplate.Name
;~ _DebugOut($oDocument.AttachedTemplate.Name)
$tableau[0][1]=$oDocument.AttachedTemplate.FullName
;~ _DebugOut($oDocument.AttachedTemplate.FullName)
_ArrayDisplay($tableau," Modeles présents dans le fichier")
If Not FileExists($oDocument.AttachedTemplate.FullName) Then
$oDocument.AttachedTemplate = "C:\Templates\Letter.dot"
;~ ActiveDocument.AttachedTemplate = "C:\Templates\Letter.dot"
EndIf
_DebugOut('')
_DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($template.Name)
_DebugOut($template.FullName)
$test= _DebugOut($template.Name)
If Not FileExists($fichier) then
msgbox(48,"Fichier inexistant"," Fichier Inacessible")
Else
;~ msgbox(48,"Le fichier est accessible",$test)
EndIf
Next
;
; Compléments
;
_DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
$Nom=_DebugOut($addIns.Name)
$Chemin=_DebugOut($addIns.Path)
_DebugOut($addIns.Installed)
_DebugOut('')
msgbox(48,"titre", _DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns))
; If Not FileExists(...
Next
#CS
; Pour sauver le document, notamment si le modèle ou complément a été changé.
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
#CE
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Word_DocClose($oDocument)
EndFunc
Re: [..] Word Modeles et compléments
Posté : mer. 06 août 2014 14:29
par orax
2 exemples :
Le premier avec une recherche non récursive dans les répertoires et l'autre récursive.
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
Local $aFileList = _FileListToArray("C:\temp", "*.docx", $FLTA_FILES, True)
_ArrayDisplay($aFileList, "$aFileList")
; La première case ($aFileList[0]) contient le nombre total de fichiers trouvés.
For $i = 1 To $aFileList[0]
ConsoleWrite($aFileList[$i] & @CRLF)
Next
; Recherche récursive.
Local $aFileList = _FileListToArrayRec("C:\temp", "*.docx", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
_ArrayDisplay($aFileList, "$aFileList")
For $i = 1 To $aFileList[0]
ConsoleWrite($aFileList[$i] & @CRLF)
Next
Re: [..] Word Modeles et compléments
Posté : jeu. 07 août 2014 11:26
par jcaspar
Bonjour à tous !
Voici le code modifié j'ai donc créer une fonction avec pour parametre le nom de fichier
en effectuant des tests le blocage semble se situer au niveau de
_word_create j'ai donc tenté de forcer les choses mais cela reste bloquant .... le nom de fichier est bien dans la variable $i ...je ne vois pas ce qui cloche ...
Merci d'avance pour vos idées et conseils !
Jean-Marc
► Afficher le texte
Code : Tout sélectionner
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
#include <File.au3>
#include <Array.au3>
; lister fichiers d'un dossier OK
Local $aFileList = _FileListToArray("d:\", "*.docx")
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Chemin incorrect.")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Aucun fichier(s) n'ont été trouvés.")
Exit
EndIf
_ArrayDisplay($aFileList, "Fichiers du dossier")
; Afficher caractéristiques du tableau des fichiers présents dans le dossier OK
Local $iRows = UBound($aFileList, $UBOUND_ROWS) ; Nombre de rangées
Local $iCols = UBound($aFileList, $UBOUND_COLUMNS) ; Nombres de colonnes
Local $iDimension = UBound($aFileList, $UBOUND_DIMENSIONS) ; Dimensions du tableau
MsgBox($MB_SYSTEMMODAL, "Structure tableau", "Le tableau comporte: " &@cr & $iDimension & " dimension(s)" & _
@cr& $iRows & " rangée(s) & " &@cr & $iCols & " colonne(s).")
; Lister les fichiers dans le dossier les afficher dans la console OK
For $i = 1 To $aFileList[0]
ConsoleWrite($aFileList[$i] & @CRLF)
msgbox(48,"Liste fichier",$aFileList[$i])
modeles($aFileList[$i])
Next
; afficher les informations sur le ou les modeles présents dans le fichier
func modeles ($i)
msgbox(64," La valeur du fichier portant la variable i est de ",$i)
_DebugSetup('Rapport debuggage', True, 2)
Local $bVisible, $bForceNew
Local $oWordApp = _Word_Create ($bVisible = True , $bForceNew = True )
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_Create Example", _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
If @extended = 1 Then
MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_Create Example", "MS Word was not running when _Word_Create was called.")
Else
MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_Create Example", "MS Word was already running when _Word_Create was called.")
EndIf
if $oWordApp=@error then
msgbox(48,"WordCreate erreur",$oWordApp)
Else
msgbox(48,"Nickel","")
EndIf
$oWordApp2=$oWordApp.AttachedTemplate.FullName
msgbox(48,"WordCreate Attached Name ",$oWordApp2)
; Si la creation de l'objet Word ne peut se faire afficher une erreur
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oDocument = _Word_DocOpen($oWordApp,$i,Default, Default, True)
;~ Local $oDocument = _Word_DocOpen($oWordApp,$i)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error opening " & $i & @CRLF & "error = " & @error & ", @extended = " & @extended)
; Définition d'un nouveau modèle
; Modèles
;~ $oWordApp.AttachedTemplate="c:\Templates\Letter.dot"
;
; Lister les informations récupérées dans un tableau --> BLEM
Local $tableau[2][2]
$tableau[0][0]=$oDocument.AttachedTemplate.Name
_DebugOut($oDocument.AttachedTemplate.Name)
$tableau[0][1]=$oDocument.AttachedTemplate.FullName
_DebugOut($oDocument.AttachedTemplate.FullName)
_ArrayDisplay($tableau," Modeles présents dans le fichier")
If Not FileExists($oDocument.AttachedTemplate.FullName) Then
$oDocument.AttachedTemplate = "C:\Templates\Letter.dot"
EndIf
_DebugOut('')
_DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($template.Name)
_DebugOut($template.FullName)
$test= _DebugOut($template.Name)
If Not FileExists($i) then
msgbox(48,"Fichier inexistant"," Fichier Inacessible")
Else
msgbox(48,"Le fichier est accessible",$test)
EndIf
Next
;
; Compléments
;
_DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
$Nom=_DebugOut($addIns.Name)
$Chemin=_DebugOut($addIns.Path)
_DebugOut($addIns.Installed)
_DebugOut('')
msgbox(48,"titre", _DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns))
; If Not FileExists(...
Next
;sauver le document notamment si le modèle est remplacé
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
; Fermeture du document
_Word_DocClose($i)
EndFunc
Re: [..] Word Modeles et compléments
Posté : jeu. 07 août 2014 14:55
par orax
Les commentaires que j'ai ajoutés pour les explications commencent par
;##.
Les lignes où j'ai mis un tiret
- doivent être supprimées.
Le résultat des _Debug...() que j'ai mis un peu partout s'affiche dans la console de SciTE. Il faut donc exécuter le script depuis SicTE ou alors changer la ligne
_DebugSetup('Rapport debuggage', True, 2) en
_DebugSetup('Rapport debuggage', True, 1) pour avoir une fenêtre de rapport.
► Afficher le texte
Code : Tout sélectionner
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
#include <File.au3>
#include <Array.au3>
_DebugSetup('Rapport debuggage', True, 2)
; lister fichiers d'un dossier OK
Local $aFileList = _FileListToArray("c:\temp\", "*.docx")
;~ Local $aFileList = _FileListToArray("d:\", "*.docx")
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Chemin incorrect.")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Aucun fichier(s) n'ont été trouvés.")
Exit
EndIf
_ArrayDisplay($aFileList, "Fichiers du dossier")
; Afficher caractéristiques du tableau des fichiers présents dans le dossier OK
Local $iRows = UBound($aFileList, $UBOUND_ROWS) ; Nombre de rangées
Local $iCols = UBound($aFileList, $UBOUND_COLUMNS) ; Nombres de colonnes
Local $iDimension = UBound($aFileList, $UBOUND_DIMENSIONS) ; Dimensions du tableau
MsgBox($MB_SYSTEMMODAL, "Structure tableau", "Le tableau comporte: " & @CR & $iDimension & " dimension(s)" & _
@CR & $iRows & " rangée(s) & " & @CR & $iCols & " colonne(s).")
; Lister les fichiers dans le dossier les afficher dans la console OK
For $i = 1 To $aFileList[0]
ConsoleWrite($aFileList[$i] & @CRLF)
MsgBox(48, "Liste fichier", $aFileList[$i])
modeles($aFileList[$i])
Next
; afficher les informations sur le ou les modeles présents dans le fichier
;## $i est plutôt utilisé comme variable temporaire dans les boucles.
-Func modeles($i)
Func modeles($fichier)
- MsgBox(64, " La valeur du fichier portant la variable i est de ", $i)
MsgBox(64, " La valeur du fichier portant la variable $fichier est de ", $fichier)
;## On peut aussi utiliser _DebugReportVar pour éviter d'avoir 36 MsgBox qui s'affichent.
_DebugReportVar("$fichier", $fichier)
Local $bVisible, $bForceNew
Local $oWordApp = _Word_Create($bVisible = True, $bForceNew = True)
If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
If @extended = 1 Then
MsgBox($MB_SYSTEMMODAL, Default, "MS Word was not running when _Word_Create was called.")
Else
MsgBox($MB_SYSTEMMODAL, Default, "MS Word was already running when _Word_Create was called.")
EndIf
- If $oWordApp = @error Then
- MsgBox(48, "WordCreate erreur", $oWordApp)
- Else
- MsgBox(48, "Nickel", "")
- EndIf
;## Syntaxehttp://msdn.microsoft.com/fr-fr/library/office/ff839734%28v=office.15%29.aspx
;## Syntaxe
;## expression .AttachedTemplate
;## expression Une variable qui représente un objet Document .
;## $oWordApp n'est pas un objet Document.
;## L'objet Document est récupéré plus bas (voir $oDocument).
- $oWordApp2 = $oWordApp.AttachedTemplate.FullName
- MsgBox(48, "WordCreate Attached Name ", $oWordApp2)
; Si la creation de l'objet Word ne peut se faire afficher une erreur
;## L'erreur ne va s'afficher que si MsgBox() renvoie une erreur.
- If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
- "Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oDocument = _Word_DocOpen($oWordApp, $fichier, Default, Default, True)
;~ Local $oDocument = _Word_DocOpen($oWordApp,$fichier)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
"Error opening " & $fichier & @CRLF & "error = " & @error & ", @extended = " & @extended)
; Définition d'un nouveau modèle
; Modèles
;~ $oWordApp.AttachedTemplate="c:\Templates\Letter.dot"
;
; Lister les informations récupérées dans un tableau --> BLEM
;## Les informations récupérées seront également affichées avec _DebugOut dans la console.
Local $tableau[2][2]
$tableau[0][0] = $oDocument.AttachedTemplate.Name
_DebugOut($oDocument.AttachedTemplate.Name)
$tableau[0][1] = $oDocument.AttachedTemplate.FullName
_DebugOut($oDocument.AttachedTemplate.FullName)
_ArrayDisplay($tableau, " Modeles présents dans le fichier")
If Not FileExists($oDocument.AttachedTemplate.FullName) Then
$oDocument.AttachedTemplate = "C:\Templates\Letter.dot"
EndIf
_DebugOut('')
_DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($template.Name)
_DebugOut($template.FullName)
- $test = _DebugOut($template.Name)
;## C'est le chemin du modèle qui nous intéresse (c.a.d. $template.FullName).
;## $i (que j'ai changé en $fichier) c'est le fichier Word donc il existe forcément puisqu'on vient de l'ouvrir.
- If Not FileExists($i) Then
If Not FileExists($template.FullName) Then
MsgBox(48, "Fichier inexistant", " Fichier Inacessible : " & $template.FullName)
Else
MsgBox(48, "Le fichier est accessible", $template.FullName)
EndIf
Next
;
; Compléments
;
_DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
$Nom = _DebugOut($addIns.Name)
$Chemin = _DebugOut($addIns.Path)
_DebugOut($addIns.Installed)
_DebugOut('')
MsgBox(48, "titre", _DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns))
; If Not FileExists(...
Next
;sauver le document notamment si le modèle est remplacé
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
; Fermeture du document
_Word_DocClose($i)
EndFunc ;==>modeles
Re: [..] Word Modeles et compléments
Posté : ven. 08 août 2014 00:30
par jcaspar
Le script fonctionne bien ...mais nous ne récupérons pas la bonne information ....
L'information affichée est
celle dela localisation du modele locale par défaut et non celui
du fichier en cours ....Peut être ai je commis une erreur dans la manipulation des objets ...ou alors
l'objet utilisé n'est pas le bon ?
En tous cas nous sommes très proche du résultat voulu ... Merci encore pour votre aide !
( J'espère ainsi débarrasé les utilisateurs des fichiers word s'ouvrants lentement ... )
Jean-Marc
► Afficher le texte
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.12.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
#include <File.au3>
#include <Array.au3>
; initialisation du rapport de deboggage
_DebugSetup('Rapport debuggage', True, 2)
; lister fichiers d'un dossier OK
Local $aFileList = _FileListToArray("h:\", "*.docx")
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Chemin incorrect.")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Aucun fichier(s) n'ont été trouvés.")
Exit
EndIf
_ArrayDisplay($aFileList, "Fichiers du dossier")
; Afficher caractéristiques du tableau des fichiers présents dans le dossier OK
Local $iRows = UBound($aFileList, $UBOUND_ROWS) ; Nombre de rangées
Local $iCols = UBound($aFileList, $UBOUND_COLUMNS) ; Nombres de colonnes
Local $iDimension = UBound($aFileList, $UBOUND_DIMENSIONS) ; Dimensions du tableau
;~ MsgBox($MB_SYSTEMMODAL, "Structure tableau", "Le tableau comporte: " & @CR & $iDimension & " dimension(s)" & _
;~ @CR & $iRows & " rangée(s) & " & @CR & $iCols & " colonne(s).")
;~ _DebugReportVar("Rangées du tableau",$iRows)
;~ _DebugReportVar("Colonnes du tableau",$iCols)
;~ _DebugReportVar("Dimensions du tableau",$iDimension)
; Lister les fichiers dans le dossier les afficher dans la console OK
For $i = 1 To $aFileList[0]
;~ ConsoleWrite($aFileList[$i] & @CRLF)
;~ MsgBox(48, "Liste fichier", $aFileList[$i])
modeles($aFileList[$i])
Next
; afficher les informations sur le ou les modeles présents dans le fichier
;## $i est plutôt utilisé comme variable temporaire dans les boucles.
Func modeles($fichier)
;~ MsgBox(64, " La valeur du fichier portant la variable $fichier est de ", $fichier)
;## On peut aussi utiliser _DebugReportVar pour éviter d'avoir 36 MsgBox qui s'affichent.
_DebugReportVar("Le nom du fichier est le suivant", $fichier)
Local $bVisible
Local $oWordApp = _Word_Create()
;~ _DebugReportVar("oWordApp",$oWordApp)
;~ If @error <> 0 Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
;~ "Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;~ If @extended = 1 Then
;~ MsgBox($MB_SYSTEMMODAL, Default, "MS Word was not running when _Word_Create was called.")
;~ Else
;~ MsgBox($MB_SYSTEMMODAL, Default, "MS Word was already running when _Word_Create was called.")
;~ EndIf
;## Syntaxehttp://msdn.microsoft.com/fr-fr/ ... 15%29.aspx
;## Syntaxe
;## expression .AttachedTemplate
;## expression Une variable qui représente un objet Document .
;## $oWordApp n'est pas un objet Document.
;## L'objet Document est récupéré plus bas (voir $oDocument).
;~ $oWordApp2 = $oWordApp.AttachedTemplate.Name
;~ $oWordApp3 = $oWordApp.AttachedTemplate.FullName
;~ _DebugReportVar("Nom template",$oWordApp2)
;~ _DebugReportVar("Nom template",$oWordApp3)
;~ MsgBox(48, "WordCreate Attached Name ",$oWordApp2)
; Si la creation de l'objet Word ne peut se faire afficher une erreur
;## L'erreur ne va s'afficher que si MsgBox() renvoie une erreur.
If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;~ Local $oDocument = _Word_DocOpen($oWordApp, $fichier, Default, Default, True)
Local $oDocument = _Word_DocOpen($oWordApp,$fichier)
;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
;~ "Error opening " & $fichier & @CRLF & "error = " & @error & ", @extended = " & @extended)
; Définition d'un nouveau modèle
; Modèles
;~ $oWordApp.AttachedTemplate="c:\Templates\Letter.dot"
;## Les informations récupérées seront également affichées avec _DebugOut dans la console.
;~ Local $tableau[2][2]
;~ $tableau[0][0] = $oDocument.AttachedTemplate.Name
;~ _DebugOut("Liens vers le modele",$oDocument.AttachedTemplate.Name)
;~ $tableau[0][1] = $oDocument.AttachedTemplate.FullName
;~ _DebugOut(" Liens chemin modele",$oDocument.AttachedTemplate.FullName)
;~ _ArrayDisplay($tableau, " Modeles présents dans le fichier")
;~ If Not FileExists($oDocument.AttachedTemplate.FullName) Then
;~ $oDocument.AttachedTemplate = "C:\Templates\Letter.dot"
;~ EndIf
_DebugOut('')
;~ _DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($oWordApp.Templates.AttachedTemplate.Name)
;~ _DebugOut($oDocument.AttachedTemplate.FullName)
;~ _DebugOut($template.Name)
_DebugOut($template.Name)
_DebugOut($template.FullName)
;## C'est le chemin du modèle qui nous intéresse (c.a.d. $template.FullName).
;## $i (que j'ai changé en $fichier) c'est le fichier Word donc il existe forcément puisqu'on vient de l'ouvrir.
;~ If Not FileExists($template.FullName) Then
;~ MsgBox(48, "Fichier inexistant", " Fichier Inacessible : " & $template.FullName)
;~ Else
;~ MsgBox(48, "Le fichier est accessible", $template.FullName)
;~ EndIf
Next
;
; Compléments
;
;~ _DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
;~ $Nom = _DebugOut($addIns.Name)
$Chemin = _DebugOut($addIns)
;~ _DebugOut($addIns.Installed)
;~ _DebugOut('')
;~ MsgBox(48, "titre", _DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns))
; If Not FileExists(...
Next
;sauver le document notamment si le modèle est remplacé
;~ _Word_DocSave($oDocument)
;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, Default, _
;~ "Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
;~ ; Fermeture du document
_Word_DocClose($i)
EndFunc ;==>modeles
Re: [..] Word Modeles et compléments
Posté : ven. 08 août 2014 09:23
par orax
Avec ça il va forcément indiqué qu'il ne trouve pas quelque chose.
► Afficher le texte
Code : Tout sélectionner
#include <Debug.au3>
#include <Array.au3>
#include <FileConstants.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
Global Const $EMPLACEMENT_FICHIERS_WORD = 'H:\'
_DebugSetup('', False, 2)
_main()
Func _main()
$oWordApp = _Word_Create(False)
If @error Then Exit MsgBox($MB_ICONERROR, Default, _
"Error creating a new Word application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
; Recherche récursive.
$aFileList = _FileListToArrayRec($EMPLACEMENT_FICHIERS_WORD, "*.docx", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
_ArrayDisplay($aFileList, "$aFileList")
For $i = 1 To $aFileList[0]
_DebugOut('+> Fichier en cours : ' & $aFileList[$i])
$oDocument = _Word_DocOpen($oWordApp, $aFileList[$i])
If @error Then
MsgBox($MB_ICONERROR, Default, _
"Error opening " & $aFileList[$i] & @CRLF & "error = " & @error & ", @extended = " & @extended)
ContinueLoop
EndIf
_modeles($oWordApp, $aFileList[$i])
_complements($oWordApp, $aFileList[$i])
;~ _sauvegardeDocument($oDocument)
_Word_DocClose($oDocument)
Next
EndFunc ;==>_main
Func _complements(ByRef $oWordApp, Const $fichier)
_DebugReportVar('$oWordApp.AddIns', $oWordApp.AddIns)
For $addIns In $oWordApp.AddIns
_DebugOut($addIns.Name)
_DebugOut('$addIns.Path : ' & $addIns.Path)
_DebugOut($addIns.Installed)
_DebugOut('')
If Not FileExists($addIns.Path) Then
MsgBox($MB_ICONWARNING, "Le complément n'existe pas.", $fichier & @CRLF & $addIns.Path & @CRLF & "Installé : " & $addIns.Installed)
EndIf
Next
EndFunc ;==>_complements
Func _modeles(ByRef $oWordApp, Const $fichier)
$oDocument = _Word_DocOpen($oWordApp, $fichier)
_DebugOut($oDocument.AttachedTemplate.Name)
_DebugOut('$oDocument.AttachedTemplate.FullName : ' & $oDocument.AttachedTemplate.FullName)
If Not FileExists($oDocument.AttachedTemplate.FullName) Then
MsgBox($MB_ICONWARNING, "Le modèle attaché n'existe pas.", $fichier & @CRLF & $oDocument.AttachedTemplate.FullName)
EndIf
_DebugOut('')
_DebugReportVar('$oWordApp.Templates', $oWordApp.Templates)
For $template In $oWordApp.Templates
_DebugOut($template.Name)
_DebugOut('$template.FullName : ' & $template.FullName)
_DebugOut('')
If Not FileExists($template.FullName) Then
MsgBox($MB_ICONWARNING, "Le modèle n'existe pas.", $fichier & @CRLF & $template.FullName)
EndIf
Next
EndFunc ;==>_modeles
Func _sauvegardeDocument(ByRef $oDocument)
; Pour sauver le document, notamment si le modèle ou complément a été changé.
_Word_DocSave($oDocument)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Word UDF: _Word_DocSave Example", _
"Error saving the Word document." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
EndFunc ;==>_sauvegardeDocument
Sinon si ça ne va toujours pas, est-ce qu'il serait possible d'avoir un fichier Word qui pose problème (avec le contenu supprimé, bien sûr) ?
Re: [..] Word Modeles et compléments
Posté : ven. 08 août 2014 14:01
par jcaspar
B

onjour à vous !
Merci beaucoup pour le travail fourni ...
comment puis je faire pour vous envoyer le fichier et une capture d'écran ?
ainsi en casde besoin ultérieur je saurais comment procéder ..

Avec tous mes remerciements
Jean-Marc
Re: [..] Word Modeles et compléments
Posté : ven. 08 août 2014 15:13
par orax
Quand vous écrivez un message, en bas il y a un onglet « Ajouter des fichiers joints ». Mais si le fichier est un peu lourd vous pouvez le faire héberger sur un site tiers comme
https://1fichier.com/ par exemple.
Re: [R] Word Modeles et compléments
Posté : mar. 12 août 2014 11:43
par jcaspar
Bonjour à tous !
Je viens de trouver le bon objet il s'agit dialog templates ...
Code : Tout sélectionner
For $Dialogs In $oWordApp.Dialogs
_DebugOut($Dialogs.Template)
Next