Editar e estilizar o texto

Você pode editar e estilizar o texto usando intervalos de texto, que são representados pelo tipo TextRange. Um TextRange representa um segmento de texto dentro de uma forma ou de uma célula de tabela. Chamar getText() em uma forma ou célula de tabela retorna um intervalo que cobre todo o texto.

Se você usar métodos que editam como o texto se encaixa em uma forma, todas as configurações de ajuste automático aplicadas à forma serão desativadas.

Como usar intervalos de texto

Um intervalo de texto tem dois índices que delimitam o segmento de texto coberto por um intervalo de texto: o índice inicial e o índice final. É possível determinar esses índices usando as funções getStartIndex() e getEndIndex().

Para ler o conteúdo de um intervalo de texto, use as funções asString() ou asRenderedString().

Para recuperar um subintervalo dentro de um intervalo de texto, use a função getRange().

O script a seguir cria uma caixa de texto no primeiro slide e define o conteúdo de texto como "Hello world!". Em seguida, ele recupera um subintervalo que abrange apenas o "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);
}

O intervalo de texto retornado por uma forma ou célula de tabela sempre cobrirá o texto inteiro, mesmo que ele seja inserido e excluído. Portanto, o exemplo acima produz estes log statements:

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

Como inserir e excluir texto

Também é possível inserir e excluir formas de texto e células de tabela usando intervalos de texto.

  • insertText() e appendText() permitem inserir texto.
  • setText() substitui o texto de um intervalo de texto pelo texto fornecido.
  • clear() exclui o texto de um intervalo de texto.

O script a seguir demonstra o uso dessas funções:

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

Este script cria uma caixa de texto no primeiro slide e define o conteúdo de texto como "Hello world!". Em seguida, os caracteres 6 a 11 ("mundo") são excluídos e o texto "galáxia" é inserido no índice 6. O exemplo acima produz o seguinte log statement:

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

Pesquisar e substituir

Use a função replaceAllText() na apresentação ou na página para realizar uma localização e substituição global em toda a apresentação ou em uma página específica.

A função find() em TextRange retorna as instâncias de uma string dentro do intervalo. Ele pode ser usado com setText() para executar o recurso de localizar e substituir em uma forma ou célula de tabela.

Parágrafos, itens de lista e execuções

TextRange fornece funções para retornar coleções úteis de entidades de texto. Algumas dessas funções incluem:

  • getParagraphs(),, que fornece todos os parágrafos que se sobrepõem ao intervalo de texto. Um parágrafo é uma sequência de texto que termina com o caractere de nova linha, "\n".
  • getListParagraphs(),, que retorna os itens de lista no intervalo de texto atual.
  • getRuns(),, que fornece as execuções de texto que se sobrepõem ao intervalo de texto atual. Uma execução de texto é um segmento em que todos os caracteres têm o mesmo estilo de texto.

Estilo do texto

O estilo do texto determina a renderização de caracteres de texto na apresentação, incluindo fonte, cor e hiperlinks.

A função getTextStyle() de um intervalo de texto fornece um objeto TextStyle usado para estilizar o texto. O objeto TextStyle cobre o mesmo texto que o TextRange pai.

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

O exemplo acima cria primeiro uma caixa de texto no primeiro slide e define o conteúdo como "Hello ". Em seguida, anexa o texto "world!". O texto recém-anexado está em negrito, vinculado a www.example.com, e a cor dele é definida como vermelha.

Ao ler estilos, a função vai retornar nulo se o intervalo tiver vários valores para o estilo. Portanto, o exemplo acima produz estes log statements:

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

Há muitos outros estilos que podem ser aplicados ao texto. Mais detalhes podem ser encontrados na documentação de referência TextStyle.

Estilo do parágrafo

Os estilos de parágrafo se aplicam a parágrafos inteiros e incluem itens como alinhamento e espaçamento de linha. A função getParagraphStyle() em TextRange fornece um objeto ParagraphStyle para estilizar todos os parágrafos que se sobrepõem ao intervalo de texto pai.

O exemplo a seguir cria uma caixa de texto no primeiro slide com quatro parágrafos e, em seguida, alinha os três primeiros parágrafos ao 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);
}

Estilo da lista

De forma semelhante a ParagraphStyle, ListStyle pode ser usado para definir o estilo de todos os parágrafos que se sobrepõem ao intervalo de texto pai.

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

O exemplo acima cria uma caixa de texto no primeiro slide, contendo quatro parágrafos: o segundo parágrafo é recuado uma vez e o terceiro é recuado duas vezes. Em seguida, ele aplica uma predefinição de lista a todos os parágrafos. Por fim, o nível de aninhamento de cada parágrafo é registrado. O nível de aninhamento do parágrafo vem do número de guias antes do texto. Com o script acima, estes log statements:

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