Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

100
Vistas
Encontrar el índice de un elemento de texto de marcador de posición en una tabla de Google Doc usando el script de la aplicación

Como sugiere el título, estoy tratando de encontrar el índice de un elemento de texto de marcador de posición en una tabla de documentos de Google para poder reemplazarlo con texto almacenado en un documento diferente.

Puedo obtener el texto preformateado que se agregará al documento, no el lugar requerido en la tabla, usando otros ejemplos que encontré en stackoverflow.

Sin embargo, no tengo claro cómo encontrar el índice del elemento de marcador de posición dentro de una de las muchas tablas en el documento de plantilla.

Necesito el índice del texto del marcador de posición para poder usar la función insertParagraph.

Para agregar un poco más de detalle: puedo encontrar el texto del marcador de posición e insertar una imagen usando el siguiente código.

 function replaceTextToImage(body, searchText, image, width) { var next = body.findText(searchText); if (!next) return; var r = next.getElement(); r.asText().setText(""); var img = r.getParent().asParagraph().insertInlineImage(0, image); if (width && typeof width == "number") { var w = img.getWidth(); var h = img.getHeight(); img.setWidth(width); img.setHeight(width * h / w); } return next;

};

Sin embargo, necesito conservar el formato del documento que quiero importar. Así que abro el documento con el texto formateado y luego recorro los diferentes tipos de elementos con un condicional para insertar el texto/imagen si el tipo de elemento coincide. Es por eso que necesito el índice del texto del marcador de posición. Consulte la función a continuación:

 function replaceTextWithDoc(body, searchText, id) { let doc = DocumentApp.openById(id) var numElements = body.getNumChildren(); var index = numElements; for (var i = 0; i < numElements; i++) { var child = body.getChild(i); if (child.asText().getText() == searchText){ index = i; body.removeChild(child); break; } } var totalElements = doc.getNumChildren(); for( var j = 0; j < totalElements; ++j ) { var element = doc.getChild(j).copy(); var type = element.getType(); if( type == DocumentApp.ElementType.PARAGRAPH ) body.insertParagraph(index, element); else if( type == DocumentApp.ElementType.TABLE ) body.insertTable(index, element); else if( type == DocumentApp.ElementType.LIST_ITEM ) body.insertParagraph(index, element); else throw new Error("According to the doc this type couldn't appear in the body: "+type); } }

Este es un ejemplo del texto de marcador de posición ( {iText} ) en una tabla: https://docs.google.com/document/d/1mZWpQqk4gYAF6UCRALrT8S99-01RYNfwni_kqDzOg7E/edit?usp=sharing

Aquí hay un ejemplo de texto e imágenes con las que necesito reemplazar el texto del marcador de posición, manteniendo todo/cualquier formato. https://docs.google.com/document/d/1wuX0g5W2GL0YJ7admiv3TNEepb_zVwQleKwazCiAMBU/edit?usp=sharing

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tema:

Si lo entiendo correctamente, desea copiar el contenido de un documento (compuesto por texto e imágenes en línea) en ciertas celdas de la tabla que contienen un determinado texto de marcador de posición.

Solución:

En ese caso, te sugiero lo siguiente:

  • Recorre todas las tablas del documento de destino con Body.getTables() .
  • Para cada tabla, itere a través de todas sus celdas.
  • Para cada celda, compruebe si su texto contiene el marcador de posición.
  • Si se incluye el marcador de posición, borre el contenido de la celda actual a través de TableCell.clear() .
  • Repita todos los elementos del documento de origen (consulte, por ejemplo, esta respuesta ).
  • Para cada elemento, verifique su tipo ( Element.getType() ).
  • Si el elemento es un párrafo, agregue el párrafo a la celda mediante TableCell.appendParagraph .
  • Si el elemento es una imagen, agréguelo a través de TableCell.appendImage .

Ejemplo de código:

 const PLACEHOLDER = "{iText}"; function myFunction() { const doc = DocumentApp.openById(TARGET_ID); const sourceDoc = DocumentApp.openById(SOURCE_ID); const body = doc.getBody(); const tables = body.getTables(); tables.forEach(table => { const numRows = table.getNumRows(); for (let i = 0; i < numRows; i++) { const row = table.getRow(i); const numCells = row.getNumCells(); for (let j = 0; j < numCells; j++) { const cell = row.getCell(j); const cellText = cell.editAsText(); const text = cellText.getText(); if (text.includes(PLACEHOLDER)) { cell.clear(); appendSourceContent(sourceDoc, cell); } } } }); } function appendSourceContent(doc, cell) { const numChildren = doc.getNumChildren(); for (let j = 0; j < numChildren; j++) { const element = doc.getChild(j).copy(); const type = element.getType(); if (type == DocumentApp.ElementType.PARAGRAPH) { cell.appendParagraph(element); } else if (type == DocumentApp.ElementType.INLINE_IMAGE) { cell.appendImage(element); } } }

Nota:

  • Agregue bloques else if adicionales si el contenido de origen puede tener tipos de elementos diferentes a los de los ElementTypes y las imágenes en línea.
  • Supuse que no desea conservar nada del contenido actual en la celda de la tabla.
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda