Estoy tratando de crear un complemento en el que tendré algunos campos de entrada y los valores de esos campos de entrada se agregarán a una plantilla de MS Word en una acción de botón.
La plantilla se parece a:
Lorem ipsum dolor sit amet, consectetur adipiscing #value_no_1# elit. Integer placerat leo eget tortor malesuada, eu ultrices mauris #value_no_2# rutrum. Vestibulum vel mattis tellus #valuen_no_3#. Vivamus sit amet ante sit amet lacus #valuen_no_4# ullamcorper placerat. Donec pretium tincidunt orci, eget vestibulum eros #value_no_5# sollicitudin quis. Morbi euismod sed eros nec ultrices. Vestibulum nec ipsum at ipsum dictum sagittis et vel felis #valuen_no_6#. Aenean a varius erat. Vestibulum euismod eget lectus eu #value_no_7# scelerisque. Etiam vel bibendum est. Sed venenatis tortor non ex tempor hendrerit #value_no_8#. Cras auctor leo malesuada tortor tempor, at pharetra orci sollicitudin #value_no_9#.La función para reemplazar el texto es la siguiente:
function fillIn() { Word.run(function (context) { // Queue a command to search the document with a wildcard // for any string of characters that starts with 'to' and ends with 'n'. var searchResults = context.document.body.search("#*#", { matchWildcards: true }); // Queue a command to load the search results and get the font property values. context.load(searchResults, "text"); // Synchronize the document state by executing the queued commands, // and return a promise to indicate task completion. return context.sync().then(function () { console.log("Found count: " + searchResults.items.length); // Queue a set of commands to change the font for each found item. for (var i = 0; i < searchResults.items.length; i++) { console.log(searchResults.items[i].text); searchResults.items[i].insertText("Hello", "Replace"); return context.sync(); } // Synchronize the document state by executing the queued commands, // and return a promise to indicate task completion. return context.sync(); }); }).catch(function (error) { console.log("Error: " + JSON.stringify(error)); if (error instanceof OfficeExtension.Error) { console.log("Debug info: " + JSON.stringify(error.debugInfo)); } }); } Para los primeros 3 o 4 valores, el texto se reemplaza correctamente, por lo que en lugar de #value_no_1# obtendré hello, pero en los últimos valores como #value_no_8# obtendré algo hello_no_8#. Supongo que esto sucede porque la cantidad de caracteres dentro de los rangos está cambiando debido al nuevo valor ingresado. Otro comentario sería que: searchResults.items[i].text devuelve el valor correcto #value_no_8#. Pero cuando llamo a replaceText obtengo hello_no_8# en lugar de hola. He investigado los documentos y no tengo ningún buen ejemplo sobre cómo abordar la escritura masiva en el documento. ¿Alguien tiene una idea sobre cómo solucionar esto u otra idea sobre cómo puedo abordar la sustitución masiva de texto?
Prueba esto:
Word.run(async (context) => { var body = context.document.body; var options = Word.SearchOptions.newObject(context); options.matchCase = false var searchResults = context.document.body.search("Hello Finder", options); context.load(searchResults, 'text, font'); return context.sync().then(() => { var results = 'Found count: ' + searchResults.items.length + '; we highlighted the results.'; for (var i = 0; i < searchResults.items.length; i++) { searchResults.items[i].insertText("Hello Replaced", "Replace"); } return context.sync().then(function () { console.log(results); }); }); }) .catch(function (error) { console.log('Error: ' + JSON.stringify(error)); if (error instanceof OfficeExtension.Error) { console.log('Debug info: ' + JSON.stringify(error.debugInfo)); } });