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

Chỉnh sửa và định kiểu văn bản bằng dải ô văn bản, được biểu thị bằng kiểu TextRange. TextRange biểu thị một đoạn văn bản trong một hình dạng hoặc trong một ô bảng. Khi gọi getText trên một hình dạng hoặc ô bảng, hệ thống sẽ trả về một dải ô văn bản bao gồm toàn bộ văn bản.

Nếu bạn sử dụng các phương thức chỉnh sửa cách văn bản vừa với một hình dạng, thì mọi chế độ tự động điều chỉnh kích thước được á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 định đoạn văn bản được dải ô văn bản bao gồm: chỉ mục bắt đầuchỉ mục kết thúc. Xác định các chỉ mục này bằng cách sử dụng hàm getStartIndexgetEndIndex.

Chỉ mục bắt đầu của dải ô văn bản là chỉ mục bao gồm và chỉ mục kết thúc là chỉ mục loại trừ. Cả hai chỉ mục đều dựa trên 0.

Để đọ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 một dải ô con từ bên trong một 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 chiếu đầu tiên và đặt nội dung văn bản của hộp đó thành "Hello world!" (Xin chào thế giới!). Sau đó, tập lệnh này truy xuất một dải ô con chỉ bao gồm "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);
}

Dải ô văn bản do một hình dạng hoặc ô bảng trả về luôn bao gồm toàn bộ văn bản, ngay cả khi văn bản được chèn và xoá. Vì vậy, ví dụ này 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ó thể chèn và xoá văn bản trong các hình dạng và ô bảng bằng cách sử dụng dải ô văn bản.

  • insertTextappendText 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 xoá văn bản khỏi bên 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 chiếu đầu tiên và đặt nội dung văn bản của hộp đó thành "Hello world!" (Xin chào thế giới!). Sau đó, tập lệnh này xoá các ký tự từ 6 đến 11 ("world") và chèn văn bản "galaxy" vào chỉ mục 6. Ví dụ này tạo ra câu lệnh nhật ký sau:

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

Tì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 thao tác tìm và thay thế trên toàn cầu 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 phạm vi. Bạn có thể sử dụng hàm này cùng với setText để thực hiện thao tác tìm và thay thế trong một hình dạng hoặc ô bảng.

Đoạn văn, mục trong danh sách và đoạn

TextRange cung cấp các hàm để trả về các tập hợp hữu ích của thực thể văn bản. Một số hàm trong số này bao gồm:

  • getParagraphs, cung cấp tất cả các đoạn văn trùng lặp với dải ô 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 trong danh sách trong dải ô văn bản hiện tại.
  • getRuns, cung cấp các đoạn văn bản trùng lặp với dải ô văn bản hiện tại. Đoạn 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 kiểu văn bản.

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

Kiểu văn bản xác định cách hiển thị các ký tự văn bản trong bản trình bày, bao gồm 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 văn bản. Đối tượng TextStyle bao gồm cùng một văn bản như 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ước tiên tạo một hộp văn bản trên trang chiếu đầu tiên và đặt nội dung của hộp đó thành "Hello ". Sau đó, ví dụ này sẽ thêm văn bản "world!". Văn bản mới được thêm vào sẽ được in đậm, liên kết với www.example.com và màu sắc 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 này 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

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

Định kiểu đoạn văn

Kiểu đoạn văn áp dụng cho toàn bộ đoạn văn và bao gồm những nội dung như căn chỉnh văn bản và khoảng cách giữa các dòng. Hàm getParagraphStyle trong TextRange cung cấp đối tượng ParagraphStyle để định kiểu cho tất cả các đoạn văn trùng lặp với dải ô văn bản mẹ.

Ví dụ sau đây tạo một hộp văn bản trên trang chiếu đầu tiên có 4 đoạn văn, sau đó căn giữa 3 đoạn vă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ể sử dụng ListStyle để định kiểu cho tất cả các đoạn văn trùng lặp với 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ước tiên tạo một hộp văn bản trên trang chiếu đầu tiên, chứa 4 đoạn văn: đoạn văn thứ hai được thụt lề một lần và đoạn văn thứ ba được thụt lề hai lần. Sau đó, ví dụ này áp dụng một danh sách đặt sẵn cho tất cả các đoạn văn. Cuối cùng, cấp độ lồng ghép của mỗi đoạn văn được ghi lại. Cấp độ lồng ghép của đoạn văn đến từ số lượng thẻ trước văn bản của đoạn văn. Vì vậy, tập lệnh tạo ra 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