Chỉnh sửa và tạo kiểu cho văn bản

Bạn có thể chỉnh sửa và tạo kiểu cho văn bản bằng cách sử dụng dải_ô văn bản, được biểu thị bằng loại TextRange. TextRange đại diện cho một đoạn văn bản trong một hình dạng hoặc trong một ô của bảng. Việc gọi getText() trên một ô hình dạng hoặc bảng sẽ trả về một dải văn bản bao phủ toàn bộ văn bản.

Nếu bạn dùng các phương thức chỉnh sửa cách văn bản vừa với hình dạng, thì mọi chế độ cài đặt tự động điều chỉnh áp dụng cho hình dạng đó sẽ bị tắt.

Sử dụng dải ô văn bản

Một dải văn bản có hai chỉ mục phân cách đoạn văn bản nằm trong một dải văn bản, đó là: chỉ mục bắt đầuchỉ mục kết thúc. Bạn có thể xác định các chỉ mục này bằng cách sử dụng hàm getStartIndex()getEndIndex().

Để đọc nội dung của một dải văn bản, hãy sử dụng hàm asString() hoặc asRenderedString().

Để truy xuất dải ô con từ bên trong dải ô văn bản, hãy sử dụng hàm getRange().

Tập lệnh sau đây tạo một hộp văn bản trên trang trình bày đầu tiên và đặt nội dung văn bản của hộp đó thành "Hello world!". Sau đó, phương thức này sẽ truy xuất một dải ô con chỉ kéo dài trong dòng chữ "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);
}

Phạm vi văn bản được một ô hình dạng hoặc bảng trả về sẽ luôn bao phủ toàn bộ văn bản, ngay cả khi văn bản đã được chèn và xoá. Vì vậy, ví dụ trên sẽ tạo ra các câu lệnh nhật ký sau:

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

Chèn và xoá văn bản

Bạn cũng có thể chèn và xoá hình dạng văn bản cũng như ô trong bảng bằng cách sử dụng dải văn bản.

  • insertText()appendText() cho phép bạn chèn văn bản.
  • setText() thay thế văn bản của một dải văn bản bằng văn bản được cung cấp.
  • clear() sẽ xoá văn bản từ trong một dải ô văn bản.

Tập lệnh sau đây minh hoạ cách sử dụng các hàm này:

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);
}

Tập lệnh này tạo một hộp văn bản trên trang trình bày đầu tiên và đặt nội dung văn bản thành "Hello world!". Sau đó, thao tác này sẽ xoá các ký tự từ 6 đến 11 ("thế giới") và chèn văn bản "galaxy" vào chỉ mục 6. Ví dụ trên tạo ra câu lệnh nhật ký sau:

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

Tìm kiếm và thay thế

Sử dụng hàm replaceAllText() trên bản trình bày hoặc trang để thực hiện tìm và thay thế chung trên toàn bộ bản trình bày hoặc một trang cụ thể.

Hàm find() trên TextRange trả về các thực thể của một chuỗi trong dải ô. Bạn có thể sử dụng thuộc tính này cùng với setText() để thực hiện tìm và thay thế trong một ô hình dạng hoặc bảng.

Đoạn, mục danh sách và lần chạy

TextRange cung cấp các hàm để trả về tập hợp các thực thể văn bản hữu ích. Có thể kể đến một số chức năng như sau:

  • getParagraphs(), cung cấp tất cả các đoạn chồng lên phạm vi văn bản. Đoạn văn là một chuỗi văn bản kết thúc bằng ký tự dòng mới, "\n".
  • getListParagraphs(), trả về các mục danh sách trong dải ô văn bản hiện tại.
  • getRuns(), cung cấp văn bản chạy chồng lên phạm vi văn bản hiện tại. Lần chạy văn bản là một đoạn văn bản trong đó tất cả các ký tự đều có cùng một kiểu văn bản.

Định kiểu văn bản

Kiểu văn bản xác định khả năng hiển thị các ký tự văn bản trong bản trình bày của bạn, bao gồm cả phông chữ, màu sắc và siêu liên kết.

Hàm getTextStyle() của một dải văn bản cung cấp đối tượng TextStyle dùng để định kiểu cho văn bản. Đối tượng TextStyle bao phủ cùng một văn bản với TextRange mẹ.

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);
}

Ví dụ trên tạo trước một hộp văn bản trên trang trình bày đầu tiên và đặt nội dung của hộp đó là "Hello ". Sau đó, hộp văn bản này sẽ nối thêm dòng chữ "world!". Văn bản mới thêm được in đậm, liên kết với www.example.com và màu của văn bản được đặt thành màu đỏ.

Khi đọc kiểu, hàm sẽ trả về giá trị rỗng nếu dải ô có nhiều giá trị cho kiểu đó. Vì vậy, mẫu ở trên sẽ tạo ra các câu lệnh nhật ký sau:

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

Bạn cũng có thể áp dụng nhiều kiểu khác cho văn bản. Bạn có thể xem thêm thông tin chi tiết trong tài liệu tham khảo về TextStyle.

Định kiểu đoạn

Kiểu đoạn áp dụng cho toàn bộ đoạn văn và bao gồm những yếu tố như căn chỉnh văn bản và giãn cách dòng. Hàm getParagraphStyle() trong TextRange cung cấp một đối tượng ParagraphStyle để định kiểu cho tất cả các đoạn chồng lên dải văn bản mẹ.

Ví dụ sau đây sẽ tạo một hộp văn bản trên trang trình bày đầu tiên với 4 đoạn, sau đó căn giữa 3 đoạn đầu tiên.

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);
}

Định kiểu danh sách

Tương tự như ParagraphStyle, bạn có thể dùng ListStyle để định kiểu cho tất cả các đoạn chồng lên dải văn bản mẹ.

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);
}

Ví dụ trên tạo ra một hộp văn bản trên trang trình bày đầu tiên, chứa 4 đoạn: đoạn thứ hai được thụt lề một lần và đoạn thứ ba được thụt lề hai lần. Sau đó, chức năng này sẽ áp dụng một giá trị đặt trước trong danh sách cho tất cả các đoạn. Cuối cùng, cấp độ lồng nhau của mỗi đoạn được ghi lại. (Cấp độ lồng ghép của đoạn văn bản đến từ số lượng thẻ trước văn bản của đoạn). Vì vậy, tập lệnh trên sẽ tạo các câu lệnh nhật ký sau:

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