Edytowanie i zmienianie stylu tekstu

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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

Jeśli użyjesz metody, która zmienia sposób dopasowania tekstu do kształtu, wszystkie ustawienia automatycznego dopasowania zastosowane do kształtu zostaną wyłączone.

Używanie zakresów tekstowych

Zakres tekstowy składa się z 2 indeksów, które ograniczają segment tekstu objętego tym zakresem: indeks początkowy i indeks końcowy. Te indeksy 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 i ustawia jego zawartość na „Witaj, świecie!”. Następnie pobiera podzakres, który obejmuje tylko "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!');
  Logger.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
  const subRange = textRange.getRange(0, 5);
  Logger.log('Sub-range Start: ' + subRange.getStartIndex() + '; Sub-range End: ' +
    subRange.getEndIndex() + '; Sub-range Content: ' + subRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  Logger.log('Failed with an error %s ', err.message);
}

Zakres tekstowy zwrócony przez kształt lub tabelę tabeli zawsze będzie obejmować cały tekst, nawet jeśli tekst zostanie 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

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

  • Wstawianie insertText() i appendText() pozwala wstawić tekst.
  • setText() zastępuje zakres tekstowy tekstem wpisanym.
  • clear() usuwa tekst z zakresu tekstowego.

Skrypt poniżej przedstawia użycie 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');
  Logger.log('Start: ' + textRange.getStartIndex() + '; End: ' +
    textRange.getEndIndex() + '; Content: ' + textRange.asString());
} catch (err) {
  // TODO (developer) - Handle exception
  Logger.log('Failed with an error %s ', err.message);
}

Ten skrypt tworzy pole tekstowe na pierwszym slajdzie i ustawia jego zawartość na „Witaj, świecie!”. Następnie usuwa znaki od 6 do 11 ("world") i wstawia tekst "galaxy" w indeksie 6. Powyższy przykład generuje następujący komunikat logu:

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

Wyszukaj i zamień

Za pomocą funkcji replaceAllText() w prezentacji lub na stronie wykonaj globalne wyszukiwanie i zastępowanie całej prezentacji lub konkretnej strony.

Funkcja find() w polu TextRange zwraca wystąpienia ciągu znaków w zakresie. Może być używany z właściwością setText() w celu wyszukania i zamiennika w komórce kształtu lub tabeli.

Akapity, elementy listy i uruchomienia

TextRange udostępnia funkcje zwracania przydatnych kolekcji encji tekstowych. Oto niektóre z nich:

  • getParagraphs(),; wszystkie akapity, które pokrywają się z zakresem tekstowym. Akapit to sekwencja tekstu zakończona znakiem nowego wiersza: &"\n".
  • getListParagraphs(),, który zwraca elementy listy w bieżącym zakresie tekstowym.
  • getRuns(),, który uruchamia fragmenty 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 w prezentacji, w tym czcionki, koloru i hiperlinków.

Funkcja getTextStyle() zakresu tekstowego zawiera obiekt TextStyle używany do określenia tekstu. Obiekt TextStyle zawiera ten sam tekst, co 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);
  Logger.log('Text: ' + helloRange.asString() + '; Bold: ' + helloRange.getTextStyle().isBold());
  Logger.log('Text: ' + insertedText.asString() + '; Bold: ' +
    insertedText.getTextStyle().isBold());
  Logger.log('Text: ' + textRange.asString() + '; Bold: ' + textRange.getTextStyle().isBold());
} catch (err) {
  // TODO (developer) - Handle exception
  Logger.log('Failed with an error %s ', err.message);
}

W powyższym przykładzie najpierw tworzy się pole tekstowe na pierwszym slajdzie, a następnie ustawia jego treść na „"Cześć” i dodaje do niej tekst "world!". Nowo dołączony tekst jest pogrubiony, połączony z: 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 oświadczenia logu:

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 TextStyle.

Styl akapitu

Style akapitów dotyczą całych akapitów i obejmują między innymi wyrównanie tekstu i odstępy między wierszami. Funkcja getParagraphStyle() w obiekcie TextRange zawiera obiekt ParagraphStyle służący do stylowania wszystkich akapitów, które pokrywają się z nadrzędnym zakresem tekstu.

Poniższy przykład pokazuje utworzenie pola tekstowego na pierwszym slajdzie zawierający 4 akapity, a następnie wyśrodkowanie pierwszych trzech akapitów.

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
  Logger.log('Failed with an error %s ', err.message);
}

Styl listy

Podobnie jak w polu ParagraphStyle, ListStyle może służyć do określania stylu wszystkich akapitów, które pokrywają się z nadrzędnym zakresem tekstu.

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();
    Logger.log('Paragraph ' + (i + 1) + '\'s nesting level: ' + listStyle.getNestingLevel());
  }
} catch (err) {
  // TODO (developer) - Handle exception
  Logger.log('Failed with an error %s ', err.message);
}

W powyższym przykładzie utworzono na pierwszym slajdzie pole tekstowe zawierające 4 akapity: drugi akapit został wcięty, a trzeci akapit wąski. Następnie do wszystkich akapitów zostaną zastosowane gotowe ustawienia listy. Na koniec jest zapisywany każdy poziom zagnieżdżenia. (Poziom zagnieżdżenia akapitu pochodzi z liczby kart przed tekstem akapitu). Powyższy skrypt generuje 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