Ich habe eine Reihe von MS Word 2010-Dokumenten und muss sie von der Seitengröße Letter in A4 konvertieren. Gibt es eine einfache Möglichkeit, das zu tun? Möglicherweise ein PowerShell-Skript in Kombination mit einer MS Word-API?
Antwort1
Hier ist etwas VBA, das Sie als Makro hinzufügen können, um alle Word-Dokumente in einem bestimmten Ordner zu ändern.
WARNUNG: Erstellen Sie eine Sicherungskopie Ihrer Dateien, bevor Sie diesen Code ausführen.
Öffnen Sie ein neues Word-Dokument und fügen Sie diesen Code in das VBA-Fenster ( Alt+ F11) ein. Nehmen Sie die erforderlichen Änderungen am Pfad vor und schließen Sie dann das Fenster.
Sub ChangePaperSize()
Dim myFile As String
Dim myPath As String
Dim myDoc As Document
'Change to the path where your documents are located.
'This code changes ALL documents in the folder.
'You may want to move only the documents you want changed to seperate folder.
myPath = "C:\temp\"
'Closes open documents before beginning
Documents.Close SaveChanges:=wdPromptToSaveChanges
'Set the path with file name for change
myFile = Dir$(myPath & "*.docx")
Do While myFile <> ""
'Open the document and make chages
Set myDoc = Documents.Open(myPath & myFile)
myDoc.PageSetup.PaperSize = wdPaperA4
'Close and saving changes
myDoc.Close SaveChanges:=wdSaveChanges
'Next file
myFile = Dir$()
Loop
msgbox "Process complete!"
End Sub
Öffnen Sie das Makrofenster ( Alt+ F8) ChangePaperSize
, wählen Sie und klicken Sie dann auf Ausführen. Das aktuell geöffnete Dokument wird geschlossen und andere Dokumente werden geöffnet und geschlossen, während die Änderungen an jedem Dokument im Ordner vorgenommen werden.
Antwort2
PowerShell-Version basierend auf der Antwort von CharlieRB:
param(
[parameter(position=0)]
[string] $Path
)
$docFiles = (Get-ChildItem $Path -Include *.docx,*.doc -Recurse)
$word = New-Object -com Word.Application
foreach ($docFile in $docFiles) {
$doc = $word.Documents.Open($docFile.FullName)
$doc.PageSetup.PaperSize = [Microsoft.Office.Interop.Word.WdPaperSize]::wdPaperA4
$doc.Save()
$doc.Close()
}
$word.Quit()