Edytowanie i formatowanie tekstu

Edytuj i formatuj tekst za pomocą zakresów tekstu, które są reprezentowane przez typ TextRange. Symbol TextRange oznacza 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.

Używanie zakresów tekstu

Zakres tekstowy ma 2 indeksy, które wyznaczają segment tekstu objęty zakresem tekstowym: indeks początkowyindeks końcowy. Określ te indeksy za pomocą funkcji getStartIndexgetEndIndex.

Indeks początkowy zakresu tekstowego jest traktowany włącznie, a indeks końcowy – wyłącznie. Oba indeksy są liczone od zera.

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 tym przykładzie zostaną wygenerowane te instrukcje logowania:

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

Wstawianie i usuwanie tekstu

Za pomocą zakresów tekstu możesz wstawiać i usuwać tekst w kształtach i komórkach tabeli.

  • insertTextappendText 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ść tekstową na „Hello world!”. Następnie usuwa znaki od 6 do 11 („world”) i wstawia tekst „galaxy” na pozycji 6. Ten przykład generuje następującą instrukcję logowania:

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

Znajdź i zamień

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, które pokrywają się z zakresem 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 używany do formatowania tekstu. Obiekt TextStyle obejmuje ten sam tekst co jego element 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);
}

W przykładzie powyżej najpierw tworzone jest pole tekstowe na pierwszym slajdzie, a jego zawartość jest ustawiana na „Hello ”. Następnie 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. Ten przykład generuje te instrukcje logowania:

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 TextStyle dokumentacji 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 getParagraphStyleTextRange udostępnia 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 być używany 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);
}

W powyższym przykładzie tworzymy pole tekstowe na pierwszym slajdzie, zawierające 4 akapity: drugi akapit jest wcięty raz, a trzeci akapit jest wcięty 2 razy. 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 pochodzi z liczby tabulatorów przed tekstem akapitu. Skrypt wygeneruje więc te instrukcje logowania:

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