Як пакетно перетворити файли MS Word з розміру сторінки Letter в A4?


1

У мене є купа документів MS Word 2010, і мені потрібно конвертувати їх з розміру сторінки Letter в A4. Чи є простий спосіб це зробити? Можливо, якийсь сценарій PowerShell поєднується з деяким API MS Word?

Відповіді:


5

Ось деякі 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, а потім натисніть кнопку «Виконати». Поточний відкритий документ закриється, а інші документи будуть відкриватися та закриватися під час внесення змін до кожного документа в папці.


Відмінно, дякую, що мені дали достатньо підказки, щоб написати те саме в PowerShell (який я вважаю простішим у використанні). Код буде розміщено як окрему відповідь.
Борек Бернар

Чудово. Радий допомогти.
CharlieRB

З’явився зворотній зв’язок (видалений оглядом), що "Documents.Close ..." потрібно коментувати або макрос припиняється із закриттям документа. Інакше все працює добре, і ОП висловив подяку вам за це.
гість-вм

1

Версія 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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.