Estoy tratando de resaltar ciertas palabras en mi documento de Google. Sé que puedo reemplazar el texto usando document.replace, pero solo reemplaza la cadena en sí, no formateando. ¿Hay alguna manera de reemplazar la cadena con una cadena de color con Google Apps Script?¿Puedo colorear ciertas palabras en documentos de Google con Google Apps Script?
Respuesta
Ésta es una solución mejor:
function highlightTextTwo() {
var doc = DocumentApp.openById('<your document id');
var textToHighlight = 'dusty death';
var highlightStyle = {};
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
var paras = doc.getParagraphs();
var textLocation = {};
var i;
for (i=0; i<paras.length; ++i) {
textLocation = paras[i].findText(textToHighlight);
if (textLocation != null && textLocation.getStartOffset() != -1) {
textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);
}
}
}
anterior respuesta:
La clave es ser capaz de hacer referencia sólo las palabras que desea colorear.
Mi solución es:
obtener el texto del párrafo que contiene las palabras que desea colores, retire el párrafo original, y después agregue una parte del texto de nuevo. A medida que agrega cada parte posterior del appendText devuelve una referencia a sólo el texto añadido, a continuación, puede especificar su color con setForegroundColor():
function highlightText() {
var doc = DocumentApp.openById('<your document id>');
var textToHighlight = 'dusty death';
var textLength = textToHighlight.length;
var paras = doc.getParagraphs();
var paraText = '';
var start;
for (var i=0; i<paras.length; ++i) {
paraText = paras[i].getText();
start = paraText.indexOf(textToHighlight);
if (start >= 0) {
var preText = paraText.substr(0, start);
var text = paraText.substr(start, textLength);
var postText = paraText.substr(start + textLength, paraText.length);
doc.removeChild(paras[i]);
var newPara = doc.insertParagraph(i, preText);
newPara.appendText(text).setForegroundColor('#FF0000');
newPara.appendText(postText).setForegroundColor('#000000');
}
}
}
creo que es posible con el método setBackgroundColor de texto en clase DocumentApp: https://developers.google.com/apps-script/class_text#setBackgroundColor
Vas a tener que recuperar sus palabras como elementos de texto. Para hacerlo, puede usar el método de búsqueda de su objeto Documento, luego iterar sobre los resultados de búsqueda y usar getElement. Finalmente, para convertir su objeto Element en un objeto Text, puede usar asText()
.
¡Espero que funcione! ;)
Con la introducción de secuencias de comandos de documentos de ruedas, ahora es posible hacer una función de resaltado de texto que se invoca desde un menú personalizado.
Surely THIS es la mejor respuesta ahora! 8 ^)
Esta secuencia de comandos se modificó a partir del uno en this answer, y se puede llamar desde la interfaz de usuario (sin parámetros) o una secuencia de comandos.
/**
* Find all matches of target text in current document, and highlight them.
*
* @param {String} target (Optional) The text or regex to search for.
* See Body.findText() for details.
* @param {String} background (Optional) The desired highlight color.
* A default orange is provided.
*/
function highlightText(target,background) {
// If no search parameter was provided, ask for one
if (arguments.length == 0) {
var ui = DocumentApp.getUi();
var result = ui.prompt('Text Highlighter',
'Enter text to highlight:', ui.ButtonSet.OK_CANCEL);
// Exit if user hit Cancel.
if (result.getSelectedButton() !== ui.Button.OK) return;
// else
target = result.getResponseText();
}
var background = background || '#F3E2A9'; // default color is light orangish.
var doc = DocumentApp.getActiveDocument();
var bodyElement = DocumentApp.getActiveDocument().getBody();
var searchResult = bodyElement.findText(target);
while (searchResult !== null) {
var thisElement = searchResult.getElement();
var thisElementText = thisElement.asText();
//Logger.log(url);
thisElementText.setBackgroundColor(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),background);
// search for next match
searchResult = bodyElement.findText(target, searchResult);
}
}
/**
* Create custom menu when document is opened.
*/
function onOpen() {
DocumentApp.getUi().createMenu('Custom')
.addItem('Text Highlighter', 'highlightText')
.addToUi();
}
¿Tiene findText() para trabajar con un RegEx? –
Sí, findText() funciona con RegEx para el 'searchpattern'. En la respuesta, recibimos una entrada de cadena del usuario, por lo que necesitaría generar un RegEx a partir de eso; ver [esta respuesta] (http://stackoverflow.com/questions/4371565). – Mogsdad
Una buena respuesta ... pero ¿no es la pregunta sobre el color "ForeGround"? ;) no parece difícil extrapolar desde allí. –
Esto está disponible como un complemento de documentos de Google denominado Multi-instance Text Highlighting. Sugerencias: Al principio no pareció funcionar, pero cerré mi documento y lo volví a abrir, y luego funcionó. Entonces no pareció funcionar de vez en cuando, pero descubrí que los caracteres especiales en su cadena de texto pueden romperlo; Creo que tenía un + en mi cadena y simplemente no hice nada. Pero sin personajes especiales, funciona genial. Realmente me ayudó.
¿Se puede utilizar Resaltar texto de varias instancias desde Google Apps Script? La pregunta era sobre el coloreado automático y no pude encontrar una interfaz de desarrollador para este complemento. –
- 1. ¿Puedes usar Google Apps Script con Python?
- 2. script de google apps UrlFetchApp.fetch limitaciones?
- 3. Google apps script urlfetch que codifica URL
- 4. Google Apps Script para abrir una URL
- 5. Desencadenar Google Apps Script por correo electrónico
- 6. Comparar dos fechas Google apps script
- 7. Google App Engine en Google Apps Domain
- 8. Google Cloud Storage no funciona con Google Apps?
- 9. Google Apps Script UrlFetchApp con JSON carga útil
- 10. ¿Es posible importar ImportRange en Google Apps Script?
- 11. ¿Cómo agrego fórmulas a la hoja de cálculo de Google con Google Apps Script?
- 12. Superado el tiempo máximo de ejecución en Google Apps Script
- 13. JQuery UI en Google Apps Script HTML Service muy lento
- 14. Google Apps Script: ¿Cómo creo un archivo en una carpeta?
- 15. Borrar contenido en Google Apps Script Document Service
- 16. ¿Cómo puedo usar Angular.js en un sitio HTML servido con Google Apps Script?
- 17. Acceso desde Apps Script a Google Cloud SQL
- 18. Script de Ruby para descargar documentos privados de Google
- 19. Agregar imágenes al documento de Google a través de Google Apps Script
- 20. Google Analytics y Samsung Smart TV Apps
- 21. Oauth + Aeoid + Python + Google App Engine + Documentos de Google
- 22. Conexión de dominio a Google App Engine sin google apps
- 23. documentos Edición de Google con API unidad
- 24. Google Appengine & google Apps - asignación www.mydomain.com a my-app-id.appspot.com
- 25. Prácticas recomendadas de Google Apps y OAuth
- 26. LightOpenID validate() falla en Google Apps
- 27. Acción de correo electrónico SMTP Google Apps
- 28. Cómo generar funciones javascript con nombre global, en coffeescript, para Google Apps Script
- 29. Cómo delegar su OpenId a Google Apps
- 30. Uso del inicio de sesión con Google federado con Google Apps y la aplicación ASP.net
Gracias. Eso es lo que estaba buscando. ¿Cómo manejarías la palabra que aparece más de una vez en el párrafo? – user1613077
Se aplica el mismo concepto. Sacas el párrafo y lo vuelves a armar. A medida que lo vuelve a armar, usa setForegroudColor en cada palabra. – Weehooey