编辑文本和设置其样式

您可以使用文本范围来编辑文本和设置文本样式,文本范围以 TextRange 类型。TextRange 表示形状或 。对形状或表格单元格调用 getText() 会返回 覆盖整个文本的文本范围。

如果您使用方法修改文字在形状中的调整方式,则任何自动调整设置 应用该形状的图形将被取消激活。

使用文本范围

文本范围有两个索引,用于分隔文本段 文本范围涵盖的以下对象:起始索引和结束索引。您可以确定 这些索引使用 getStartIndex()getEndIndex() 函数。

如需读取文本范围的内容,请使用 asString()asRenderedString() 函数。

如需检索文本范围内的子范围,请使用 getRange() 函数。

以下脚本在第一张幻灯片上创建了一个文本框,并设置其文本内容 更改为“Hello world!”。然后,它会检索仅跨越“Hello”的子范围。

幻灯片/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);
}

形状或表格单元格返回的文本范围将始终覆盖整个文本, 即使已插入和删除文字也无妨。因此,上面的示例生成了 以下日志语句:

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

插入和删除文本

您还可以使用 文本范围。

  • insertText()appendText() 可让您插入文本。
  • setText() 会将文本范围的文本替换为提供的文本。
  • clear() 可删除文本范围内的文本。

以下脚本演示了如何使用这些函数:

幻灯片/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);
}

此脚本会在第一张幻灯片上创建一个文本框,并设置其文本内容。 更改为“Hello world!”。然后删除第 6 到 11 个字符(“world”)以及 插入文本“galaxy”索引 6。上面的示例生成 以下日志语句:

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

搜索和替换

对演示文稿或页面使用 replaceAllText() 函数以执行全局 在整个演示文稿或特定页面上进行查找和替换。

TextRange 上的 find() 函数会返回 范围。它可以与 setText() 搭配使用,以执行“查找和替换”操作 。

段落、列表项和运行

TextRange 提供了可返回有用的文本实体集合的函数。 其中一些函数包括:

  • getParagraphs(),:提供与文本范围重叠的所有段落。答 paragraph 是以换行符结束的一系列文本, “\n”。
  • getListParagraphs(),,用于返回当前文本范围内的列表项。
  • getRuns(),,用于提供与当前文本范围重叠的文本运行。答 text run 是一段文本,其中所有字符具有相同的文本 样式。

文本样式

文本样式决定了演示文稿中文本字符的呈现方式, 包括字体、颜色和超链接

文本范围的 getTextStyle() 函数提供一个 TextStyle 对象,用于 设置文本样式。TextStyle 对象涵盖与其父级 TextRange 相同的文本。

幻灯片/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);
}

上面的示例首先在第一张幻灯片上创建了一个文本框,并设置其 更改为“Hello ”。然后,它会附加文本“world!”。新附加的文本 以粗体显示,关联到了 www.example.com,并且其颜色已设置 变成红色。

读取样式时,如果范围包含多个值,该函数会返回 null 。因此,上面的示例会生成以下日志语句:

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

还有许多其他样式可以应用于文本。如需了解更多详情 可在 TextStyle 参考文档中找到。

段落样式

段落样式会应用于整个段落,包括文本对齐方式和行号等 间距。TextRange 中的 getParagraphStyle() 函数提供了一个 ParagraphStyle 对象,用于设置所有与父文本范围重叠的段落的样式。

以下示例在第一张幻灯片上创建了一个文本框,其中包含四个 然后居中对齐前三个段落。

幻灯片/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);
}

列表样式

ParagraphStyle 类似,ListStyle 可用于设置所有段落的样式。 与父文本范围重叠。

幻灯片/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);
}

上面的示例在第一张幻灯片上创建了一个文本框,其中包含四个段落: 第二个段落缩进一次,第三个段落缩进了 两次。然后,它会将列表预设应用于所有段落。最后,每个 会记录段落的嵌套级别。(段落的嵌套级别 段落文本前的制表符数量。)以上脚本会生成 以下日志语句:

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