Edytowanie i zmienianie stylu tekstu

Tekst możesz edytować i formatować za pomocą zakresów tekstu, które są reprezentowane przez typ TextRange. TextRange to segment tekstu w kształcie lub w komórce tabeli. Wywołanie getText() w przypadku kształtu lub komórki tabeli zwraca zakres tekstu obejmujący cały tekst.

Jeśli używasz metod, które zmieniają sposób dopasowania tekstu do kształtu, wszystkie ustawienia automatycznego dopasowania zastosowane do kształtu zostaną wyłączone.

Korzystanie z zakresów tekstu

Zakres tekstowy ma 2 indeksy, które wyznaczają segment tekstu objęty zakresem: indeks początkowyindeks końcowy. Indeksy te możesz określić za pomocą funkcji getStartIndex()getEndIndex().

Aby odczytać zawartość zakresu tekstu, użyj funkcji asString() lub asRenderedString().

Aby pobrać podzakres z zakresu tekstu, użyj funkcji getRange().

Poniższy skrypt tworzy pole tekstowe na pierwszym slajdzie i ustawia jego zawartość na „Hello world!”. Następnie pobiera podzakres obejmujący tylko słowo „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);
}

Zakres tekstu zwracany przez kształt lub komórkę tabeli zawsze obejmuje cały tekst, nawet jeśli tekst jest wstawiany i usuwany. W powyższym przykładzie zostaną wygenerowane te instrukcje logowania:

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

Wstawianie i usuwanie tekstu

Możesz też wstawiać i usuwać kształty tekstowe oraz komórki tabeli za pomocą zakresów tekstu.

  • insertText()appendText() umożliwiają wstawianie tekstu.
  • setText() zastępuje tekst w zakresie tekstu podanym tekstem.
  • clear() usuwa tekst z zakresu tekstu.

Poniższy skrypt pokazuje, jak używać tych funkcji:

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

Ten skrypt tworzy pole tekstowe na pierwszym slajdzie i ustawia jego zawartość na „Hello world!”. Następnie usuwa znaki od 6 do 11 („world”) i wstawia tekst „galaxy” na pozycji 6. Powyższy przykład generuje ten komunikat w logu:

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

Wyszukiwanie i zamienianie

Użyj funkcji replaceAllText() w prezentacji lub na stronie, aby przeprowadzić globalne wyszukiwanie i zamienianie w całej prezentacji lub na konkretnej stronie.

Funkcja find() w obiekcie TextRange zwraca wystąpienia ciągu znaków w zakresie. Można jej używać razem z funkcją setText() do wyszukiwania i zastępowania tekstu w kształcie lub komórce tabeli.

akapitów, elementów listy i ciągów znaków;

TextRange udostępnia funkcje zwracające przydatne kolekcje elementów tekstowych. Oto niektóre z tych funkcji:

  • getParagraphs(),, która zawiera wszystkie akapity nakładające się na zakres tekstu. A Akapit to ciąg tekstu, który kończy się znakiem nowego wiersza „\n”.
  • getListParagraphs(),, która zwraca elementy listy w bieżącym zakresie tekstu.
  • getRuns(),, która zawiera zakresy tekstu nakładające się na bieżący zakres tekstu. Ciąg tekstowy to segment tekstu, w którym wszystkie znaki mają ten sam styl tekstu.

Styl tekstu

Styl tekstu określa sposób renderowania znaków w prezentacji, w tym czcionkę, kolor i hiperlinki.

Funkcja getTextStyle() zakresu tekstu udostępnia obiekt TextStyle służący do stylizowania tekstu. Obiekt TextStyle obejmuje ten sam tekst co jego nadrzędny obiekt TextRange.

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

W powyższym przykładzie najpierw tworzone jest pole tekstowe na pierwszym slajdzie, a następnie ustawiana jest jego zawartość na „Hello ”. Potem dołączany jest tekst „world!”. Nowo dodany tekst jest pogrubiony, połączony z www.example.com i ma kolor czerwony.

Podczas odczytywania stylów funkcja zwraca wartość null, jeśli zakres ma wiele wartości dla stylu. Powyższy przykład generuje te instrukcje dziennika:

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

Istnieje wiele innych stylów, które można zastosować do tekstu. Więcej szczegółów znajdziesz w TextStyledokumentacji referencyjnej.

Styl akapitu

Style akapitu dotyczą całych akapitów i obejmują takie elementy jak wyrównanie tekstu i odstępy między wierszami. Funkcja getParagraphStyle() w TextRange zwraca obiekt ParagraphStyle do stylizowania wszystkich akapitów, które nakładają się na zakres tekstu nadrzędnego.

W poniższym przykładzie tworzymy pole tekstowe na pierwszym slajdzie z 4 akapitami, a następnie wyśrodkowujemy pierwsze 3 akapity.

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

Style listy

Podobnie jak w przypadku ParagraphStyle, element ListStyle może służyć do stylizowania wszystkich akapitów, które nakładają się na zakres tekstu nadrzędnego.

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

Powyższy przykład tworzy pole tekstowe na pierwszym slajdzie zawierające 4 akapity: drugi akapit jest wcięty raz, a trzeci akapit jest wcięty dwukrotnie. Następnie stosuje gotowe ustawienia listy do wszystkich akapitów. Na koniec rejestrowany jest poziom zagnieżdżenia każdego akapitu. (Poziom zagnieżdżenia akapitu zależy od liczby tabulatorów przed tekstem akapitu). Powyższy skrypt generuje te wpisy w dzienniku:

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