Edición y estilo del texto

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

Si usas métodos que editan la forma en que el texto se ajusta a una forma, se desactivará cualquier configuración de ajuste automático que se aplique a ella.

Cómo usar rangos de texto

Un rango de texto tiene dos índices que delimitan el segmento de texto cubierto por un rango de texto: 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 muestra una forma o una celda de la tabla siempre cubrirá todo el texto, incluso si se inserta y se borra texto. Por lo tanto, en el ejemplo anterior, se producen 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 los 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 demuestra 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 ("mundo") y, en su lugar, inserta el texto "galaxia" 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 una presentación o una página para realizar una búsqueda y reemplazo global en toda la presentación o en una página específica.

La función find() en TextRange muestra las instancias de una string dentro del rango. Se puede usar junto con setText() para realizar búsquedas y reemplazos en una forma o celda de una tabla.

Párrafos, elementos de lista y ejecuciones

TextRange proporciona funciones para mostrar 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 muestra los elementos de lista en el rango de texto actual
  • getRuns(),, que proporciona las ejecuciones de texto que se superponen con el rango de texto actual Una ejecución de texto es un segmento de texto en el que todos los caracteres tienen el mismo estilo de texto.

Estilos de texto

El estilo del texto determina la representación de caracteres de texto en tu presentación, incluida la fuente, el color y los hipervínculos.

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

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 "Hello ". Luego, agrega el texto "world!". El texto que se agregó recientemente se muestra en negrita, está vinculado a www.example.com y su color se establece en rojo.

Cuando se leen estilos, la función muestra un valor nulo si el rango tiene varios valores para el diseño. Por lo tanto, en el ejemplo anterior, se producen las siguientes instrucciones de registro:

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

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

Estilos de párrafo

Los estilos de párrafo se aplican a párrafos enteros y, además, incluyen la alineación del texto y el espaciado de líneas. La función getParagraphStyle() en TextRange proporciona un objeto ParagraphStyle para aplicar diseño a todos los párrafos que se superponen con el rango de texto superior.

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

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);
}

Estilos de listas

De manera similar a ParagraphStyle, se puede usar ListStyle para aplicar diseño a todos los párrafos que se superpongan con el rango de texto superior.

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: en el segundo, se aplica una sangría y dos en el tercer párrafo. 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 anidamiento del párrafo proviene de la cantidad de tabulaciones 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