У мене є купа документів MS Word 2010, і мені потрібно конвертувати їх з розміру сторінки Letter в A4. Чи є простий спосіб це зробити? Можливо, якийсь сценарій PowerShell поєднується з деяким API MS Word?
У мене є купа документів MS Word 2010, і мені потрібно конвертувати їх з розміру сторінки Letter в A4. Чи є простий спосіб це зробити? Можливо, якийсь сценарій PowerShell поєднується з деяким API MS Word?
Відповіді:
Ось деякі 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:
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()