Edición y estilo del texto

Puedes editar y aplicar estilo al texto con rangos de texto, que se representan con el tipo TextRange. Un TextRange representa un segmento de texto dentro de una forma o una celda de una tabla. Si se llama a getText() en una forma o celda de tabla, se devuelve un rango de texto que abarca todo el texto.

Si usas métodos que editan cómo se ajusta el texto dentro de una forma, se desactivará cualquier configuración de ajuste automático aplicada a la forma.

Cómo usar rangos de texto

Un rango de texto tiene dos índices que delimitan el segmento de texto que abarca: el índice de inicio y el índice de finalización. Puedes determinar estos índices con las funciones getStartIndex() y getEndIndex().

Para leer el contenido de un rango de texto, usa las funciones asString() o asRenderedString().

Para recuperar un subrango dentro de un rango de texto, usa la función getRange().

La siguiente secuencia de comandos crea un cuadro de texto en la primera diapositiva y establece su contenido de texto en "Hello world!". Luego, recupera un subrango que abarca solo "Hello".

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  // Set text in TEXT_BOX
  textRange.setText('Hello world!');
  console.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
  const subRange = textRange.getRange(0, 5);
  console.log('Sub-range Start: ' + subRange.getStartIndex() + '; Sub-range End: ' +
    subRange.getEndIndex() + '; Sub-range Content: ' + subRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

El rango de texto que devuelve una forma o una celda de tabla siempre abarcará todo el texto, incluso si se inserta y borra texto. Por lo tanto, el ejemplo anterior produce las siguientes instrucciones de registro:

Start: 0; End: 13; Content: Hello world!
Start: 0; End: 5; Content: Hello

Cómo insertar y borrar texto

También puedes insertar y borrar formas de texto y celdas de tablas con rangos de texto.

  • insertText() y appendText() te permiten insertar texto.
  • setText() reemplaza el texto de un rango de texto por el texto proporcionado.
  • clear() borra texto dentro de un rango de texto.

En la siguiente secuencia de comandos, se muestra el uso de estas funciones:

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  textRange.setText('Hello world!');
  textRange.clear(6, 11);
  // Insert text in TEXT_BOX
  textRange.insertText(6, 'galaxy');
  console.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

Esta secuencia de comandos crea un cuadro de texto en la primera diapositiva y establece su contenido de texto en "Hello world!". Luego, borra los caracteres del 6 al 11 ("world") y, en su lugar, inserta el texto "galaxy" en el índice 6. En el ejemplo anterior, se produce la siguiente instrucción de registro:

Start: 0; End: 14; Content: Hello galaxy!

Buscar y reemplazar

Usa la función replaceAllText() en la presentación o la página para realizar una búsqueda y reemplazo globales en toda la presentación o en una página específica.

La función find() en TextRange devuelve las instancias de una cadena dentro del rango. Se puede usar junto con setText() para realizar la función de buscar y reemplazar dentro de una forma o celda de tabla.

Párrafos, elementos de lista y ejecuciones

TextRange proporciona funciones para devolver colecciones útiles de entidades de texto. Algunas de estas funciones incluyen las siguientes:

  • getParagraphs(),, que proporciona todos los párrafos que se superponen con el rango de texto. Un párrafo es una secuencia de texto que termina con el carácter de salto de línea, "\n".
  • getListParagraphs(),, que devuelve los elementos de la lista en el rango de texto actual.
  • getRuns(),, que proporciona los tramos de texto que se superponen con el rango de texto actual. Un tramo de texto es un segmento de texto en el que todos los caracteres tienen el mismo estilo de texto.

Estilo del texto

El estilo de texto determina la renderización de los caracteres de texto en tu presentación, lo que incluye la fuente, el color y la vinculación.

La función getTextStyle() de un rango de texto proporciona un objeto TextStyle que se usa para aplicar estilo al texto. El objeto TextStyle abarca el mismo texto que su objeto TextRange principal.

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
  const textRange = shape.getText();
  // Set text in TEXT_BOX
  textRange.setText('Hello ');
  // Append text in TEXT_BOX
  const insertedText = textRange.appendText('world!');
  // Style the text with url,bold
  insertedText.getTextStyle()
      .setBold(true)
      .setLinkUrl('www.example.com')
      .setForegroundColor('#ff0000');
  const helloRange = textRange.getRange(0, 5);
  console.log('Text: ' + helloRange.asString() + '; Bold: ' + helloRange.getTextStyle().isBold());
  console.log('Text: ' + insertedText.asString() + '; Bold: ' +
    insertedText.getTextStyle().isBold());
  console.log('Text: ' + textRange.asString() + '; Bold: ' + textRange.getTextStyle().isBold());
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

En el ejemplo anterior, primero se crea un cuadro de texto en la primera diapositiva y se establece su contenido en "Hola ". Luego, se agrega el texto "mundo". El texto recién agregado se muestra en negrita, se vincula a www.example.com y su color se establece en rojo.

Cuando se leen estilos, la función devuelve nulo si el rango tiene varios valores para el estilo. Por lo tanto, la muestra anterior produce las siguientes instrucciones de registro:

Text: Hello; Bold: false
Text: world!; Bold: true
Text: Hello world!; Bold: null

Existen muchos otros estilos que se pueden aplicar al texto. Puedes encontrar más detalles en la documentación de referencia de TextStyle.

Estilo de párrafo

Los estilos de párrafo se aplican a párrafos completos y abarcan aspectos como la alineación del texto y el espaciado entre líneas. La función getParagraphStyle() en TextRange proporciona un objeto ParagraphStyle para aplicar estilo a todos los párrafos que se superponen con el rango de texto principal.

En el siguiente ejemplo, se crea un cuadro de texto en la primera diapositiva con cuatro párrafos y, luego, se alinea al centro los tres primeros.

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, 50, 300, 300);
  const textRange = shape.getText();
  // Set the text in the shape/TEXT_BOX
  textRange.setText('Paragraph 1\nParagraph2\nParagraph 3\nParagraph 4');
  const paragraphs = textRange.getParagraphs();
  // Style the paragraph alignment center.
  for (let i = 0; i <= 3; i++) {
    const paragraphStyle = paragraphs[i].getRange().getParagraphStyle();
    paragraphStyle.setParagraphAlignment(SlidesApp.ParagraphAlignment.CENTER);
  }
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

Diseño de listas

Al igual que ParagraphStyle, ListStyle se puede usar para aplicar estilo a todos los párrafos que se superponen con el rango de texto principal.

slides/style/style.gs
try {
  // Get the first slide of active presentation
  const slide = SlidesApp.getActivePresentation().getSlides()[0];
  // Insert shape in the slide with dimensions
  const shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, 50, 300, 300);
  // Add and style the list
  const textRange = shape.getText();
  textRange.appendText('Item 1\n')
      .appendText('\tItem 2\n')
      .appendText('\t\tItem 3\n')
      .appendText('Item 4');
  // Preset patterns of glyphs for lists in text.
  textRange.getListStyle().applyListPreset(SlidesApp.ListPreset.DIGIT_ALPHA_ROMAN);
  const paragraphs = textRange.getParagraphs();
  for (let i = 0; i < paragraphs.length; i++) {
    const listStyle = paragraphs[i].getRange().getListStyle();
    console.log('Paragraph ' + (i + 1) + '\'s nesting level: ' + listStyle.getNestingLevel());
  }
} catch (err) {
  // TODO (developer) - Handle exception
  console.log('Failed with an error %s ', err.message);
}

En el ejemplo anterior, se crea un cuadro de texto en la primera diapositiva que contiene cuatro párrafos: el segundo párrafo tiene una sangría y el tercer párrafo tiene dos sangrías. Luego, aplica un ajuste predeterminado de lista a todos los párrafos. Por último, se registra el nivel de anidación de cada párrafo. (El nivel de anidación del párrafo proviene de la cantidad de tabulaciones que hay antes del texto del párrafo). Por lo tanto, la secuencia de comandos anterior produce las siguientes instrucciones de registro:

Paragraph 1's nesting level: 0
Paragraph 2's nesting level: 1
Paragraph 3's nesting level: 2
Paragraph 4's nesting level: 0