Edytowanie i zmienianie stylu tekstu

Możesz edytować tekst i określać jego styl za pomocą zakresów tekstowych reprezentowanych przez typ TextRange. TextRange reprezentuje segment tekstu w kształcie lub w komórce tabeli. Wywołanie getText() względem kształtu lub komórki tabeli zwraca zakres tekstu obejmujący cały tekst.

Jeśli używasz metod, które pozwalają edytować 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 ma 2 indeksy, które oddzielają segment tekstu uwzględnionego w zakresie tekstowym: 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 „Hello, world!”. Następnie pobiera podzakres, który obejmuje tylko zakres „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 zwrócony przez kształt lub komórkę tabeli zawsze obejmuje cały tekst, nawet jeśli tekst zostanie wstawiony i usunięty. Powyższy przykład generuje takie instrukcje logu:

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 tekstowe i komórki tabeli.

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

Ten skrypt pokazuje użycie 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 („świat”) i wstawia tekst „galaktyka” w indeksie 6. Powyższy przykład generuje tę instrukcję logu:

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

Wyszukaj i zamień

Funkcja replaceAllText() w prezentacji lub na stronie umożliwia globalne wyszukiwanie i zastępowanie całej prezentacji lub konkretnej strony.

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

Akapity, listy elementów i uruchomienia

TextRange udostępnia funkcje zwracające przydatne zbiory encji tekstowych. Niektóre z tych funkcji to:

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

Style tekstu

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

Funkcja getTextStyle() zakresu tekstu dostarcza obiekt TextStyle służący do określania stylu tekstu. Obiekt TextStyle obejmuje ten sam tekst co jego obiekt nadrzędny 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);
}

Powyższy przykład tworzy najpierw pole tekstowe na pierwszym slajdzie i ustawia jego zawartość na „Cześć ”. Następnie dodaje tekst „world!”. Nowo dołączony tekst jest pogrubiony i zawiera link do elementu www.example.com, a jego kolor jest ustawiony na 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 logu:

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

Do tekstu można zastosować wiele innych stylów. Więcej informacji znajdziesz w dokumentacji referencyjnej TextStyle.

Style akapitu

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

Poniższy przykład pokazuje utworzenie na pierwszym slajdzie pola tekstowego zawierającego 4 akapity, a następnie wyśrodkowuje 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);
}

Styl listy

Tak jak w przypadku ParagraphStyle, ListStyle można używać do określania stylu wszystkich akapitów, które nakładają się na nadrzędny zakres tekstu.

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 na pierwszym slajdzie pole tekstowe zawierające 4 akapity: do drugiego akapitu zostało zastosowane jedno wcięcie, a trzeci akapit – dwa. Następnie do wszystkich akapitów zostaną zastosowane gotowe ustawienia listy. Na koniec rejestrowany jest poziom zagnieżdżenia każdego akapitu. Poziom zagnieżdżenia akapitu zależy od liczby znaków tabulacji przed tekstem akapitu. Powyższy skrypt generuje więc 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