Necesita automatizar Word pero no está seguro de si usar VBA o el nuevo modelo de complemento de Office en JavaScript. Las macros de VBA tradicionales se ejecutan dentro de la aplicación de escritorio de Word y dependen del modelo de objetos heredado. La API moderna de Word es una interfaz basada en REST que funciona en Word para la web, escritorio y móvil. Este artículo compara ambos enfoques, explica cuándo elegir cada uno y proporciona instrucciones paso a paso para crear una tarea de automatización simple con ambos métodos.
Puntos clave: VBA frente al complemento de Office en JavaScript para la automatización de Word
- Macros de VBA con Alt+F11 y el modelo de objetos heredado: Ideal para la automatización solo de escritorio que requiere una manipulación profunda del documento, como combinación de correspondencia o formato complejo.
- Complemento de Office en JavaScript que usa la biblioteca Office.js y la API de JavaScript de Word: Ideal para soluciones multiplataforma que se ejecutan en Word en Windows, Mac, navegador y móvil.
- API REST de Word a través de Microsoft Graph: Ideal para la automatización del lado del servidor donde no hay un cliente de Word instalado, como la generación de documentos desde un servicio web.
Comprender los dos modelos de automatización para Word
VBA ha sido parte de Word durante décadas. Se ejecuta dentro del proceso de Word, tiene acceso completo al modelo de objetos Document y puede controlar todos los aspectos de la aplicación. Las macros de VBA están incrustadas en archivos .docm o .dotm y requieren la versión de escritorio de Word. No pueden ejecutarse en Word para la web ni en dispositivos móviles.
La API moderna de Word consta de dos capas: la API de JavaScript de Word (Office.js) que se usa en los complementos de Office, y la API REST de Word a la que se accede a través de Microsoft Graph. Los complementos de Office son aplicaciones web que se ejecutan dentro de un panel de tareas o control de contenido dentro de Word. Funcionan en Windows, Mac, navegador y móvil. La API REST no tiene estado y está diseñada para el procesamiento de documentos del lado del servidor sin un cliente de Word.
Cuándo VBA es la elección correcta
Use VBA cuando necesite automatizar tareas que requieran interacción directa con la ventana de la aplicación Word, como abrir cuadros de diálogo, cambiar la configuración de impresión o ejecutar características heredadas como Combinar correspondencia. VBA también es ideal para macros personales o departamentales que no necesitan distribuirse a usuarios en otras plataformas.
Cuándo el complemento de Office en JavaScript es la elección correcta
Elija el modelo de complemento en JavaScript cuando necesite una solución que funcione en Word para la web, Word para Mac y Word móvil. El complemento se ejecuta en un entorno de navegador en espacio aislado y no puede acceder al sistema de archivos local ni al registro de Windows. Es mejor para aplicaciones de panel de tareas que insertan contenido, modifican el formato o interactúan con servicios web externos.
Pasos para crear una automatización básica con VBA
Los siguientes pasos crean una macro de VBA que inserta una tabla con formato en la posición del cursor. Abra el editor de VBA con Alt+F11, inserte un nuevo módulo y pegue el código.
- Abrir el Editor de VBA
Presione Alt+F11 en Word. En el Explorador de proyectos, haga clic con el botón derecho en Normal o en el nombre de su documento y elija Insertar > Módulo. - Escribir el código de la macro
En el nuevo módulo, pegue el siguiente código:Sub InsertTableVBA()
Dim tbl As Table
Set tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=3, NumColumns:=4)
tbl.Borders.Enable = True
tbl.Cell(1, 1).Range.Text = "Header"
End Sub - Ejecutar la macro
Presione F5 mientras el cursor está dentro de la macro, o cierre el editor y presione Alt+F8. Seleccione InsertTableVBA y haga clic en Ejecutar. - Guardar el documento como habilitado para macros
Vaya a Archivo > Guardar como. Elija Documento de Word habilitado para macros (.docm) en la lista de tipos de archivo.
Pasos para crear la misma automatización con un complemento de Office en JavaScript
El complemento en JavaScript requiere un servidor web o una carpeta local con un archivo de manifiesto, una página HTML y un archivo JavaScript. Los siguientes pasos usan una carpeta local para pruebas.
- Crear la carpeta del proyecto
Cree una carpeta llamada WordAddin. Dentro de ella, cree tres archivos: manifest.xml, index.html y app.js. - Escribir el archivo de manifiesto
En manifest.xml, pegue el siguiente manifiesto mínimo:<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"
xsi:type="TaskPaneApp">
<Id>12345678-1234-1234-1234-123456789abc</Id>
<Version>1.0.0.0</Version>
<ProviderName>YourName</ProviderName>
<DefaultLocale>en-US</DefaultLocale>
<DisplayName DefaultValue="Table Inserter"/>
<Description DefaultValue="Inserts a table at the cursor"/>
<Hosts><Host Name="Document"/></Hosts>
<DefaultSettings>
<SourceLocation DefaultValue="https://localhost:3000/index.html"/>
</DefaultSettings>
</OfficeApp> - Escribir la página HTML
En index.html, pegue:<!DOCTYPE html>
<html>
<head>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
<script src="app.js"></script>
</head>
<body>
<button id="insertTable">Insert Table</button>
</body>
</html> - Escribir la lógica de JavaScript
En app.js, pegue:Office.onReady(function() {
document.getElementById('insertTable').onclick = function() {
Word.run(function(context) {
var table = context.document.body.insertTable(3, 4, Word.InsertLocation.start, [['Header','','','']]);
table.style = "Table Grid";
return context.sync();
});
};
}); - Hospedar y cargar lateralmente el complemento
Ejecute un servidor HTTPS local (por ejemplo, con Node.js y el paquete http-server) en el puerto 3000. En Word, vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Catálogos de complementos de confianza. Agregue la ruta de su carpeta local y marque Mostrar en el menú. Reinicie Word y haga clic en Insertar > Complementos > Mis complementos para ver Table Inserter.
Errores comunes y limitaciones de cada enfoque
La macro de VBA no se ejecuta en Word para la web
Si distribuye un archivo .docm a usuarios en Word para la web, la macro no se ejecutará. La versión web no admite VBA. Convierta la macro a un complemento en JavaScript o use Power Automate con la API REST de Word.
El complemento en JavaScript no puede acceder a archivos locales
La API Office.js se ejecuta dentro de un control de navegador en espacio aislado. No puede leer ni escribir archivos en el disco duro local. Si necesita importar datos desde un archivo CSV en el disco, primero debe cargar el archivo a un servidor web o usar la API FileReader para leer el contenido del archivo en el navegador.
La macro de VBA activa advertencias de seguridad
De forma predeterminada, Word bloquea las macros de fuentes no confiables. Los usuarios ven una barra de seguridad amarilla y deben hacer clic en Habilitar contenido. Para evitar esto, firme la macro con un certificado digital o almacene el documento en una ubicación de confianza configurada en Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Ubicaciones de confianza.
El complemento en JavaScript requiere HTTPS en producción
Durante el desarrollo, puede usar HTTP para pruebas locales. Para la implementación en producción, el SourceLocation del manifiesto debe usar HTTPS. También necesita un certificado SSL válido. Microsoft no permite complementos HTTP en AppSource ni en entornos de producción.
VBA frente al complemento de Office en JavaScript: comparación de características y plataformas
| Elemento | Macro de VBA | Complemento de Office en JavaScript |
|---|---|---|
| Compatibilidad de plataformas | Word de escritorio (Windows, Mac) | Word de escritorio, web, Mac, móvil |
| Implementación | Incrustada en archivo .docm | Archivo de manifiesto alojado en servidor web |
| Acceso al modelo de objetos de Word | Modelo de objetos heredado completo | API de JavaScript de Word (subconjunto del modelo de objetos) |
| Acceso al sistema de archivos | Completo (a través de Scripting.FileSystemObject) | Ninguno (en espacio aislado) |
| Personalización de la interfaz de usuario | XML de la cinta de opciones, cuadros de diálogo personalizados | HTML, CSS, JavaScript en el panel de tareas |
| Distribución | Correo electrónico, recurso compartido de red | AppSource, SharePoint, catálogo interno |
| Modelo de seguridad | Ubicaciones de confianza, firmas digitales | HTTPS, validación de manifiesto, permisos |
Las macros de VBA le brindan control total sobre la aplicación de escritorio de Word, pero lo limitan al escritorio de Windows o Mac. Los complementos de Office en JavaScript sacrifican algo de acceso profundo al modelo de objetos a cambio de alcance multiplataforma y una pila de desarrollo moderna basada en web. Para proyectos nuevos que deben ejecutarse en Word para la web o en dispositivos móviles, el complemento en JavaScript es la ruta recomendada. Para la automatización heredada que usa características como Combinar correspondencia o controles ActiveX, VBA sigue siendo la única opción.
Ahora puede decidir qué modelo de automatización se ajusta a los requisitos de su proyecto. Comience probando una macro de VBA simple si sus usuarios solo están en escritorio. Si necesita compatibilidad web o móvil, cree un complemento en JavaScript usando la API de JavaScript de Word y Office.js. Como consejo avanzado, explore la API REST de Word a través de Microsoft Graph para la generación de documentos del lado del servidor donde no hay ningún cliente de Word instalado.