Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En las secciones siguientes se explica cómo desarrollar un complemento de Word que cambia automáticamente el encabezado del documento cuando se abre un documento nuevo o existente. Aunque este ejemplo específico es para Word, la configuración del manifiesto es la misma para Excel y PowerPoint. Para obtener información general sobre este estilo de patrón de activación basado en eventos, vea Activar complementos con eventos.
Importante
Este ejemplo requiere que tenga una suscripción de Microsoft 365 con la versión compatible de Word.
Creación de un nuevo complemento
Cree un nuevo complemento siguiendo el inicio rápido de Word complemento. Esto le proporcionará un complemento de Office en funcionamiento al que puede agregar el código de activación basado en eventos.
Nota:
Para obtener una versión completa del ejemplo descrito en este tutorial, consulte Agregar automáticamente etiquetas con un complemento cuando se abre un documento de Word ejemplo en nuestro repositorio de GitHub de ejemplos.
Configuración del manifiesto
Para habilitar un complemento basado en eventos, debe configurar los siguientes elementos en el VersionOverridesV1_0 nodo del manifiesto.
- En el elemento Runtimes , cree un nuevo elemento Override para Runtime. Invalide el tipo "javascript" y haga referencia al archivo JavaScript que contiene la función que desea desencadenar con el evento.
- En el elemento DesktopFormFactor , agregue un elemento FunctionFile para el archivo JavaScript con el controlador de eventos.
- En el elemento ExtensionPoint , establezca en
xsi:typeLaunchEvent. Esto habilita la característica de activación basada en eventos en el complemento. - En el elemento LaunchEvent , establezca en
TypeOnDocumentOpenedy especifique el nombre de la función de JavaScript del controlador de eventos en elFunctionNameatributo .
Use el siguiente código de manifiesto de ejemplo para actualizar el proyecto.
En el editor de código, abra el proyecto de inicio rápido que ha creado.
Abra el archivo manifest.xml ubicado en la raíz del proyecto.
Seleccione todo
<VersionOverrides>el nodo (incluidas las etiquetas open y close) y reemplácelo por el siguiente XML.<VersionOverrides xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="VersionOverridesV1_0"> <Hosts> <Host xsi:type="Document"> <Runtimes> <Runtime resid="Taskpane.Url" lifetime="long" /> <Runtime resid="WebViewRuntime.Url"> <Override type="javascript" resid="JsRuntimeWord.Url"/> </Runtime> </Runtimes> <DesktopFormFactor> <GetStarted> <Title resid="GetStarted.Title"/> <Description resid="GetStarted.Description"/> <LearnMoreUrl resid="GetStarted.LearnMoreUrl"/> </GetStarted> <FunctionFile resid="Commands.Url"/> <ExtensionPoint xsi:type="LaunchEvent"> <LaunchEvents> <LaunchEvent Type="OnDocumentOpened" FunctionName="changeHeader"></LaunchEvent> </LaunchEvents> <SourceLocation resid="WebViewRuntime.Url"/> </ExtensionPoint> <ExtensionPoint xsi:type="PrimaryCommandSurface"> <OfficeTab id="TabHome"> <Group id="CommandsGroup"> <Label resid="CommandsGroup.Label"/> <Icon> <bt:Image size="16" resid="Icon.16x16"/> <bt:Image size="32" resid="Icon.32x32"/> <bt:Image size="80" resid="Icon.80x80"/> </Icon> <Control xsi:type="Button" id="TaskpaneButton"> <Label resid="TaskpaneButton.Label"/> <Supertip> <Title resid="TaskpaneButton.Label"/> <Description resid="TaskpaneButton.Tooltip"/> </Supertip> <Icon> <bt:Image size="16" resid="Icon.16x16"/> <bt:Image size="32" resid="Icon.32x32"/> <bt:Image size="80" resid="Icon.80x80"/> </Icon> <Action xsi:type="ShowTaskpane"> <TaskpaneId>ButtonId1</TaskpaneId> <SourceLocation resid="Taskpane.Url"/> </Action> </Control> </Group> </OfficeTab> </ExtensionPoint> </DesktopFormFactor> </Host> </Hosts> <Resources> <bt:Images> <bt:Image id="Icon.16x16" DefaultValue="https://localhost:3000/assets/icon-16.png"/> <bt:Image id="Icon.32x32" DefaultValue="https://localhost:3000/assets/icon-32.png"/> <bt:Image id="Icon.80x80" DefaultValue="https://localhost:3000/assets/icon-80.png"/> </bt:Images> <bt:Urls> <bt:Url id="GetStarted.LearnMoreUrl" DefaultValue="https://go.microsoft.com/fwlink/?LinkId=276812"/> <bt:Url id="Commands.Url" DefaultValue="https://localhost:3000/commands.html"/> <bt:Url id="Taskpane.Url" DefaultValue="https://localhost:3000/taskpane.html"/> <bt:Url id="WebViewRuntime.Url" DefaultValue="https://localhost:3000/commands.html"/> <bt:Url id="JsRuntimeWord.Url" DefaultValue="https://localhost:3000/commands.js"/> </bt:Urls> <bt:ShortStrings> <bt:String id="GetStarted.Title" DefaultValue="Get started with your sample add-in!"/> <bt:String id="CommandsGroup.Label" DefaultValue="Event-based add-in activation"/> <bt:String id="TaskpaneButton.Label" DefaultValue="My add-in"/> </bt:ShortStrings> <bt:LongStrings> <bt:String id="GetStarted.Description" DefaultValue="Your sample add-in loaded successfully. Go to the HOME tab and click the 'Show Task Pane' button to get started."/> <bt:String id="TaskpaneButton.Tooltip" DefaultValue="Click to show the task pane"/> </bt:LongStrings> </Resources> </VersionOverrides>Guarde los cambios.
Implementar el controlador de eventos
Para permitir que el complemento actúe cuando se produzca el OnDocumentOpened evento, debe implementar un controlador de eventos de JavaScript. En esta sección, creará la changeHeader función , que agrega un encabezado "Public" a los documentos nuevos o un encabezado "Highly Confidential" a los documentos existentes que ya tienen contenido.
En la carpeta ./src/commands , abra el archivo denominado commands.js.
Reemplace todo el contenido de commands.js por el código JavaScript siguiente.
/* * Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. * See LICENSE in the project root for license information. */ /* global global, Office, self, window */ Office.onReady(() => { // If needed, Office.js is ready to be called. }); async function changeHeader(event) { Word.run(async (context) => { const body = context.document.body; body.load("text"); await context.sync(); if (body.text.length === 0) { // For new or empty documents, make a "Public" header. const header = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); const firstPageHeader = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.firstPage); header.clear(); firstPageHeader.clear(); header.insertParagraph("Public - The data is for the public and shareable externally", "Start"); firstPageHeader.insertParagraph("Public - The data is for the public and shareable externally", "Start"); header.font.color = "#07641d"; firstPageHeader.font.color = "#07641d"; await context.sync(); } else { // For existing documents, make a "Highly Confidential" header. const header = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); const firstPageHeader = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.firstPage); header.clear(); firstPageHeader.clear(); header.insertParagraph("Highly Confidential - The data must be secret or in some way highly critical", "Start"); firstPageHeader.insertParagraph("Highly Confidential - The data must be secret or in some way highly critical", "Start"); header.font.color = "#f8334d"; firstPageHeader.font.color = "#f8334d"; await context.sync(); } }); // Calling event.completed is required. event.completed lets the platform know that processing has completed. event.completed(); } async function paragraphChanged() { await Word.run(async (context) => { const results = context.document.body.search("110"); results.load("length"); await context.sync(); if (results.items.length === 0) { const header = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); header.clear(); header.insertParagraph("Public - The data is for the public and shareable externally", "Start"); const font = header.font; font.color = "#07641d"; await context.sync(); } else { const header = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); header.clear(); header.insertParagraph("Highly Confidential - The data must be secret or in some way highly critical", "Start"); const font = header.font; font.color = "#f8334d"; await context.sync(); } }); } async function registerOnParagraphChanged(event) { await Word.run(async (context) => { let eventContext = context.document.onParagraphChanged.add(paragraphChanged); await context.sync(); }); // Calling event.completed is required. event.completed lets the platform know that processing has completed. event.completed(); } Office.actions.associate("changeHeader", changeHeader); Office.actions.associate("registerOnParagraphChanged", registerOnParagraphChanged);Guarde los cambios.
Prueba y validación del complemento
- Ejecute
npm startpara compilar el proyecto e iniciar el servidor web. Omita el documento Word que se abre. - Descargue manualmente el complemento en Word en la web siguiendo las instrucciones de Transferencia local de complementos de Office a Office en la Web. Use el manifest.xml en la raíz del proyecto.
- Intente abrir documentos Word nuevos y existentes en Word en la web. Los encabezados se deben agregar automáticamente cuando se abran.