Edytowanie i zmienianie stylu tekstu

Tekst możesz edytować i zmieniać jego styl za pomocą zakresów tekstowych, które są reprezentowane przez typ TextRange. TextRange reprezentuje fragment tekstu w obrębie kształtu lub w komórce tabeli. Wywołanie getText() w komórce kształtu lub tabeli zwraca zakres tekstowy, który obejmuje cały tekst.

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

Korzystanie z zakresów tekstowych

Zakres tekstu obejmuje 2 indeksy ograniczające segment tekstu objętego zakresem tekstowym: indeks początkowy i indeks końcowy. Indeksy te możesz określić za pomocą funkcji getStartIndex() i getEndIndex().

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

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

Ten skrypt tworzy pole tekstowe na pierwszym slajdzie, a jego treść zawiera tekst „Hello world”. Pobiera podzakres, który obejmuje tylko element „Hello”.

slajdy/styl/styl.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 został on wstawiony i usunięty. Powyższy przykład generuje następujące instrukcje logowania:

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

Wstawianie i usuwanie tekstu

Za pomocą zakresów tekstowych możesz też wstawiać i usuwać kształty oraz komórki tabeli.

  • Możesz wstawić tekst za pomocą insertText() i appendText().
  • setText() zastępuje tekst z zakresu tekstowego podanym tekstem.
  • clear() usuwa tekst z określonego zakresu.

Skrypt poniżej pokazuje, jak używać tych funkcji:

slajdy/styl/styl.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, a jego zawartość zawiera tekst „Hello world”. Następnie usuwa znaki od 6 do 11 („świat”) i wstawia tekst „galaktyka” w indeksie 6. Powyższy przykład generuje taką instrukcję logowania:

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

Wyszukaj i zamień

Za pomocą funkcji replaceAllText() w prezentacji lub na stronie możesz przeprowadzić globalne wyszukiwanie lub zastąpić całą prezentację lub konkretną stronę.

Funkcja find() w TextRange zwraca instancje ciągu w zakresie. Tej funkcji można używać razem z funkcją setText() do wyszukiwania i zastępowania w komórce kształtu lub tabeli.

Akapity, elementy listy i uruchomienia

TextRange udostępnia funkcje zwracające przydatne kolekcje encji tekstowych. Do tych funkcji należą:

  • getParagraphs(),, który zawiera wszystkie akapity, które nakładają się na zakres tekstu. Akapit to ciąg tekstu, który kończy się znakiem nowego wiersza: „\n”.
  • getListParagraphs(),, który zwraca elementy listy z bieżącego zakresu tekstowego.
  • getRuns(),, który podaje uruchomienia tekstu, które pokrywają się z bieżącym zakresem tekstu. Uruchomienie tekstu to segment tekstu, w którym wszystkie znaki mają ten sam styl tekstu.

Styl tekstu

Styl tekstu określa renderowanie znaków tekstu w prezentacji, w tym czcionki, koloru i hiperlinków.

Funkcja getTextStyle() zakresu tekstowego zawiera obiekt TextStyle używany do określania stylu tekstu. Obiekt TextStyle zawiera taki sam tekst jak obiekt nadrzędny TextRange.

slajdy/styl/styl.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 tworzy pole tekstowe na pierwszym slajdzie, a jego zawartość ustawia na „Hello”. Następnie dołącza tekst „world!”. Nowo załączony tekst jest pogrubiony i połączony z adresem www.example.com, a jego kolor jest czerwony.

Podczas odczytywania stylów funkcja zwraca wartość null, jeśli zakres ma wiele wartości stylu. Powyższy przykład generuje następujące instrukcje:

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 informacji znajdziesz w dokumentacji referencyjnej TextStyle.

Styl akapitu

Style akapitu dotyczą całych akapitów i obejmują między innymi wyrównanie tekstu i odstępy między wierszami. Funkcja getParagraphStyle() w metodzie TextRange udostępnia obiekt ParagraphStyle do określania stylu wszystkich akapitów, które nakładają się na zakres nadrzędnego tekstu.

Poniższy przykład tworzy pole tekstowe na pierwszym slajdzie z czterema akapitami, a środek wyrównuje pierwsze trzy akapity.

slajdy/styl/styl.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);
}

Styl listy

Podobnie jak ParagraphStyle ListStyle może być używany do określania stylu wszystkich akapitów, które nakładają się na zakres tekstu nadrzędnego.

slajdy/styl/styl.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 ma wcięcie przed drugim, a trzeci – wcięcie 2 razy. Następnie zastosowano we wszystkich akapitach gotowe ustawienia listy. Na koniec rejestrowany jest poziom zagnieżdżania poszczególnych akapitów. Poziom zagnieżdżania akapitu zależy od liczby kart przed tekstem akapitu. Powyższy skrypt tworzy następujące instrukcje logu:

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