Editar e estilizar o texto

É possível editar e estilizar o texto usando intervalos de texto representados pelos TextRange. Um TextRange representa um segmento de texto dentro de uma forma ou em uma célula da tabela. Chamar getText() em uma forma ou célula de tabela retorna uma intervalo de texto que cobre todo o texto.

Se você usar métodos que editam a forma como o texto se ajusta a uma forma, as configurações de ajuste automático aplicados à forma serão desativados.

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 de fim. Você pode 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 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 do texto para "Hello world!". Em seguida, ele recupera um subintervalo que abrange apenas "Hello".

slides/estilo/estilo.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á todo o texto, mesmo que o texto seja inserido e excluído. O exemplo acima produz a seguintes log statements:

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

Como inserir e excluir texto

Você também pode inserir e excluir formas de texto e células da tabela usando uma intervalos de texto.

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

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

slides/estilo/estilo.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 para "Hello world!". Em seguida, ele exclui os caracteres 6 a 11 ("mundo") e insere o texto "galáxia" no índice 6. O exemplo acima produz a 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 fazer uma localizar e substituir 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 do intervalo 10.240.0.0/16. Pode ser usado com setText() para localizar e substituir. dentro de 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 do texto. Um parágrafo é uma sequência de texto que termina com o caractere de nova linha, "\n".
  • getListParagraphs(),, que retorna os itens da lista no intervalo de texto atual.
  • getRuns(),, que fornece as execuções de texto que se sobrepõem ao intervalo de texto atual. Um a sequência de texto é um segmento de texto em que todos os caracteres têm o mesmo texto estilo.

Estilo do texto

Estilo de texto determina a renderização de caracteres de texto em sua apresentação, incluindo fonte, cor e hiperlink.

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

slides/estilo/estilo.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 primeiro cria uma caixa de texto no primeiro slide e define conteúdo para "Hello ". Em seguida, ele anexa o texto "world!". O texto recém-anexado está em negrito, vinculado a www.example.com, e a cor dele está definida para vermelho.

Ao ler estilos, a função retorna nulo se o intervalo tiver vários valores para o estilo. Portanto, o exemplo acima produz os seguintes 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 de TextStyle.

Estilo de parágrafo

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

O exemplo a seguir cria uma caixa de texto no primeiro slide com quatro parágrafos e, em seguida, centraliza os três primeiros parágrafos.

slides/estilo/estilo.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

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

slides/estilo/estilo.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 parágrafo é recuado duas vezes. Em seguida, ele aplica uma predefinição de lista a todos os parágrafos. Por fim, cada de aninhamento do parágrafo é registrado. (O nível de aninhamento do parágrafo vem de o número de guias antes do texto do parágrafo.) Assim, o script acima produz seguintes 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