Как выполнить пакетное преобразование файлов MS Word из формата страницы Letter в формат A4?

Как выполнить пакетное преобразование файлов MS Word из формата страницы Letter в формат A4?

У меня есть куча документов MS Word 2010, и мне нужно преобразовать их из формата Letter в формат A4. Есть ли простой способ сделать это? Возможно, какой-то скрипт PowerShell в сочетании с каким-то API MS Word?

решение1

Вот пример кода VBA, который можно добавить в качестве макроса для изменения всех документов Word в заданной папке.

ВНИМАНИЕ: Перед запуском этого кода сделайте резервную копию своих файлов.

Откройте новый документ Word, вставьте этот код в окно VBA ( Alt+ F11). Внесите необходимые изменения в путь, затем закройте окно.

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

Откройте окно макроса ( Alt+ F8) и выберите ChangePaperSize, затем нажмите «Выполнить». Текущий открытый документ закроется, а другие документы будут открываться и закрываться по мере внесения изменений в каждый документ в папке.

решение2

Версия PowerShell на основе ответа 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()

Связанный контент