2010-11-30 25 views
1

J'ai des codes de champ configurés dans certains documents qui afficheront la date actuelle lors de l'impression, mais seront invisibles le reste du temps, autant que je sache. Je dois maintenant appliquer ce pied de page à des centaines de documents. Il semble que cela devrait être possible avec PowerShell, mais je ne sais pas vraiment comment l'utiliser, et je ne peux pas trouver une bonne référence/documentation (jusqu'à présent je l'ai eu pour ouvrir un document, remplacer du texte, et ferme le document). Je voudrais que le code de champ suivant soit sur le côté droit de chaque section de pied de page:PowerShell ajouter des codes de champ au pied de page ms

{IF {PRINTDATE \ @ "M/j/aaaa h: mm"} = {DATE \ @ "M/j/aaaa h: mm "}" COPIE NON CONTRÔLÉE AU {DATE \ @ "M/j/aaaa"} "" "

Je sais que c'est probablement une façon terrible de le faire, mais, la vraie question est, comment faire vous ajoutez des codes de champ aux pieds dans des documents Word 2007 utilisant PowerShell?

Répondre

1

Merci à crobin1 à tek-tips pour la réponse à celui-ci. Il a dit qu'il a référencé http://msdn.microsoft.com/en-us/library/bb258930%28v=office.12%29.aspx et un tas de "Hey, Scripting Guy!" entrées de blog
Voici un exemple de script qui fait à peu près ce que je voulais.

fonction Edit-Pied de page ([string] Document de $) {

add-type -AssemblyName "Microsoft.Office.Interop.Word" 

#Variables used 
set-variable -name wdAlignPageNumberCenter -value 1 

-option constante

$fc1 = @" IF {PRINTDATE \@ "M/d/yyyy h:mm"}={DATE \@ "M/d/yyyy h:mm"} "UNCONTROLLED COPY AS OF {DATE \@ "M/d/yyyy"}" " " "@ 


$Word = New-Object -comobject Word.Application 
$Word.Visible = $True 
#$Word.Visible = $False 

$fc2 = [ref] "" -as [Type] 

$OpenDoc = $Word.Documents.Open($Document) 
$c = $OpenDoc.Sections.Item(1).Footers.Item(1).PageNumbers.Add($wdAlignPageNumberCenter) 
$range1 = $openDoc.Sections.Item(1).Footers.Item(1).range 
$field1 = $OpenDoc.Fields.Add($range1, -1, $fc2) 
$field1.Code.Text = $fc1 
$field1.Update 

#$OpenDoc.Close() }