Cómo convertir documentos de Word al formato OOXML strict mediante programación
🔍 WiseChecker

Cómo convertir documentos de Word al formato OOXML strict mediante programación

Necesita convertir un documento de Word al formato OOXML Strict, pero no puede usar el cuadro de diálogo Guardar como para cada archivo. OOXML Strict es la versión estándar ISO del formato Office Open XML, que garantiza la compatibilidad multiplataforma y el cumplimiento para el archivado a largo plazo. Este artículo explica cómo automatizar la conversión mediante macros de VBA, PowerShell con el SDK de Open XML y el modelo de objetos COM de Office. Aprenderá el código y los pasos exactos para convertir documentos individuales o por lotes sin intervención manual.

Puntos clave: Automatización de la conversión a OOXML Strict

  • Macro de VBA con FileFormat:=wdFormatXMLStrictDocument: Convierte el documento activo a OOXML Strict en una sola línea de código.
  • PowerShell + Open XML SDK 2.5: Permite la conversión sin interfaz gráfica en servidores sin Word instalado mediante el espacio de nombres DocumentFormat.OpenXml.Packaging.
  • Procesamiento por lotes mediante bucle de carpeta: Use Dir() en VBA o Get-ChildItem en PowerShell para convertir todos los archivos .docx de una carpeta.

ADVERTISEMENT

Qué es OOXML Strict y por qué convertir mediante programación

OOXML Strict es la versión estándar ISO 29500:2008 del formato Office Open XML. El formato .docx predeterminado en Word usa una variante transitoria que incluye características binarias heredadas que no forman parte del estándar ISO. OOXML Strict elimina esos elementos heredados, lo que produce un archivo totalmente compatible con el estándar internacional.

La conversión mediante programación es necesaria cuando se deben procesar cientos o miles de archivos. La conversión manual a través de Archivo > Guardar como > Examinar > Guardar como tipo > Documento de Word (docx) con la opción “Strict” seleccionada no es práctica para el trabajo por lotes. La automatización también garantiza una salida coherente: todos los archivos convertidos usan la misma configuración, lo que reduce el error humano.

Requisitos previos para cada método

El método de VBA requiere que Word esté instalado en la máquina. El método de PowerShell requiere el SDK de Open XML 2.5 para Microsoft Office, que se puede instalar a través de NuGet o del Centro de descargas de Microsoft. El método COM también requiere que Word esté instalado, pero se ejecuta fuera de la interfaz gráfica de Word, lo que resulta útil para la automatización del lado del servidor donde no existe una sesión interactiva.

Método 1: Convertir con una macro de VBA

Este método funciona dentro de Word. Se ejecuta una macro que guarda el documento actual en formato OOXML Strict. La macro usa la constante wdFormatXMLStrictDocument, que tiene un valor de 24.

  1. Abra el Editor de Visual Basic
    Presione Alt+F11. En el Explorador de proyectos, haga doble clic en ThisDocument o inserte un nuevo módulo mediante Insertar > Módulo.
  2. Pegue la macro de conversión
    Copie y pegue el siguiente código en el módulo:
    Sub ConvertToOOXMLStrict()
    Dim doc As Document
    Set doc = ActiveDocument
    Dim newName As String
    newName = Replace(doc.FullName, ".docx", "_strict.docx")
    doc.SaveAs2 FileName:=newName, FileFormat:=wdFormatXMLStrictDocument
    End Sub
  3. Ejecute la macro
    Presione F5 mientras el cursor está dentro de la macro. Se guarda un nuevo archivo llamado original_strict.docx en la misma carpeta.
  4. Convertir por lotes todos los documentos de una carpeta
    Use esta macro para procesar todos los archivos .docx de una carpeta:
    Sub BatchConvertToStrict()
    Dim f As String, doc As Document
    f = Dir("C:\Docs\docx")
    Do While f <> ""
    Set doc = Documents.Open("C:\Docs\" & f)
    doc.SaveAs2 FileName:="C:\Docs\Strict\" & f, FileFormat:=wdFormatXMLStrictDocument
    doc.Close
    f = Dir
    Loop
    End Sub
    Cambie las rutas de carpeta para que coincidan con su entorno.

ADVERTISEMENT

Método 2: Convertir con PowerShell y el SDK de Open XML

Este método no requiere que Word esté instalado. Usa el espacio de nombres DocumentFormat.OpenXml.Packaging para cambiar el formato de archivo mediante programación. El SDK lee el documento, cambia su tipo de paquete a Strict y lo guarda.

  1. Instale el SDK de Open XML
    Ejecute este comando en una consola de PowerShell con privilegios elevados:
    Install-Package OpenXmlSdk -ProviderName NuGet
    Como alternativa, descargue el SDK de Microsoft e instálelo manualmente.
  2. Cree el script de conversión
    Guarde lo siguiente como ConvertToStrict.ps1:
    Add-Type -Path "C:\Program Files\Open XML SDK\V2.5\lib\DocumentFormat.OpenXml.dll"
    $source = "C:\Docs\report.docx"
    $destination = "C:\Docs\report_strict.docx"
    $doc = [DocumentFormat.OpenXml.Packaging.WordprocessingDocument]::Open($source, $false)
    $doc.ChangeDocumentType([DocumentFormat.OpenXml.WordprocessingDocumentType]::Strict)
    $doc.SaveAs($destination)
    $doc.Dispose()
  3. Ejecute el script
    Abra PowerShell como administrador y ejecute:
    powershell -ExecutionPolicy Bypass -File ConvertToStrict.ps1
    El archivo de salida se guarda en la ruta de destino.
  4. Convertir por lotes todos los archivos .docx de una carpeta
    Envuelva la conversión en un bucle:
    $files = Get-ChildItem "C:\Docs" -Filter docx
    foreach ($f in $files) {
    $doc = [DocumentFormat.OpenXml.Packaging.WordprocessingDocument]::Open($f.FullName, $false)
    $doc.ChangeDocumentType([DocumentFormat.OpenXml.WordprocessingDocumentType]::Strict)
    $out = Join-Path "C:\Docs\Strict" $f.Name
    $doc.SaveAs($out)
    $doc.Dispose()
    }

Método 3: Convertir con el modelo de objetos COM (Word no visible)

Este método usa la interfaz COM de Word, pero mantiene la aplicación oculta. Es adecuado para la automatización basada en servidor donde se necesitan las capacidades de representación completas de Word, pero no se desea una ventana visible.

  1. Cree un script de PowerShell con COM
    Guarde lo siguiente como ConvertViaCOM.ps1:
    $word = New-Object -ComObject Word.Application
    $word.Visible = $false
    $doc = $word.Documents.Open("C:\Docs\report.docx")
    $doc.SaveAs2("C:\Docs\report_strict.docx", [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLStrictDocument)
    $doc.Close()
    $word.Quit()
  2. Ejecute el script
    Ejecute en PowerShell:
    powershell -ExecutionPolicy Bypass -File ConvertViaCOM.ps1
    Word se abre brevemente en segundo plano, convierte el archivo y se cierra.
  3. Conversión por lotes con COM
    Recorra todos los archivos .docx:
    $word = New-Object -ComObject Word.Application
    $word.Visible = $false
    $files = Get-ChildItem "C:\Docs" -Filter docx
    foreach ($f in $files) {
    $doc = $word.Documents.Open($f.FullName)
    $out = Join-Path "C:\Docs\Strict" $f.Name
    $doc.SaveAs2($out, [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLStrictDocument)
    $doc.Close()
    }
    $word.Quit()

ADVERTISEMENT

Errores y limitaciones comunes de conversión

Error “El formato de archivo no es compatible” en el método del SDK de PowerShell

Esto ocurre cuando el archivo de origen no es un archivo .docx válido. El SDK solo puede abrir paquetes basados en OPC. Los archivos dañados o los guardados en formato .doc fallarán. Verifique la extensión del archivo y repare el documento primero con la característica Abrir y reparar de Word.

La macro de VBA falla con “Permiso denegado”

La macro no puede escribir en una ubicación de solo lectura o en una carpeta donde el usuario carece de permisos de escritura. Asegúrese de que la carpeta de salida permita el acceso de escritura. Use una ruta absoluta como C:\Users\YourName\Documents\Strict\ en lugar de una carpeta protegida por el sistema.

El método COM deja procesos Word.exe en ejecución

Si el script se bloquea antes de llamar a $word.Quit(), queda un proceso de Word en memoria. Envuelva siempre las operaciones COM en un bloque try-catch-finally, o use Stop-Process -Name WINWORD después de que finalice el script. Para scripts de producción, use el método System.Runtime.InteropServices.Marshal.ReleaseComObject para liberar limpiamente el objeto COM.

Los archivos OOXML Strict se abren en versiones anteriores de Word

Word 2007 y versiones anteriores no admiten OOXML Strict de forma nativa. Los usuarios con estas versiones verán una advertencia de compatibilidad o es posible que no puedan abrir el archivo. Si se requiere compatibilidad con versiones anteriores, mantenga el formato .docx transitorio.

VBA vs PowerShell vs COM: Comparación de métodos de automatización

Elemento Macro de VBA PowerShell + SDK Objeto COM
Requiere Word instalado Sí No Sí
Requiere el SDK de Open XML No Sí No
Se ejecuta sin interfaz gráfica (sin GUI) No (Word visible) Sí Sí
Velocidad de conversión por lotes Lenta (abre cada documento) Rápida (sin carga de Word) Moderada
Maneja formato complejo Fidelidad total Puede perder algunas características Fidelidad total
Ideal para Archivos individuales puntuales Automatización de servidores Servidor con licencia de Word

Ahora puede convertir documentos de Word al formato OOXML Strict mediante programación usando VBA, PowerShell con el SDK de Open XML o el modelo de objetos COM. Elija el método que se adapte a su entorno: VBA para uso interactivo, SDK para servidores sin interfaz gráfica y COM cuando se necesite la fidelidad completa de Word en un servidor. Como siguiente paso, pruebe cada método en un solo archivo antes de ejecutar un lote. Un consejo avanzado: use el método del SDK para validar la salida comprobando la propiedad DocumentType; debería devolver Strict después de la conversión.

ADVERTISEMENT