¿Cómo convertir por lotes archivos de MS Word del tamaño de página Carta a A4?

¿Cómo convertir por lotes archivos de MS Word del tamaño de página Carta a A4?

Tengo un montón de documentos de MS Word 2010 y necesito convertirlos del tamaño de página Carta a A4. ¿Existe una forma sencilla de hacerlo? ¿Posiblemente algún script de PowerShell combinado con alguna API de MS Word?

Respuesta1

Aquí hay algo de VBA que puede agregar como macro para cambiar todos los documentos de Word en una carpeta determinada.

ADVERTENCIA: haga una copia de seguridad de sus archivos antes de ejecutar este código.

Abra un nuevo documento de Word, pegue este código en la ventana de VBA ( Alt+ F11). Realice los cambios necesarios en la ruta y luego cierre la ventana.

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

Abra la ventana Macro ( Alt+ F8) y elija ChangePaperSize, luego haga clic en ejecutar. El documento abierto actual se cerrará y otros documentos se abrirán y cerrarán a medida que realice cambios en cada documento de la carpeta.

Respuesta2

Versión de PowerShell basada en la respuesta de 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()

información relacionada