Google Apps Script để đặt màu hình dạng

Aug 26 2020

Tôi đã xem qua tài liệu tham khảo Google Apps Script tại đây và nhận thấy có một phương pháp cho setSolidFill(color).

Tôi tự hỏi liệu có thể viết Tập lệnh Google Apps để đặt màu hình dạng dựa trên giá trị / tham chiếu tra cứu trong Google Trang tính không? Về cơ bản, đặt màu của Hình dạng # 001 trong Google Trang trình bày thành mã HEX trong A2 của Google Trang tính?

Trả lời

3 Tanaike Aug 26 2020 at 14:19

Tôi đang tự hỏi liệu có thể đặt màu hình dạng dựa trên mã màu được tìm thấy trong Google Trang tính hay không.

Tôi nghĩ rằng mục tiêu của bạn có thể đạt được. Vì vậy, để giúp hiểu rõ về phương pháp đạt được mục tiêu của bạn, tôi đã đề xuất 2 mẫu sau.

Mẫu 1:

Trong mẫu này, màu của hình dạng được thay đổi bằng cách sử dụng ID đối tượng của hình dạng trong trang trình bày đầu tiên trên Google Trang trình bày. Trong mẫu này, màu hex được lấy từ ô "A1" của Bảng tính. Vui lòng đặt ID bảng tính, tên trang tính và ID bản trình bày.

Kịch bản mẫu:

function myFunction() {
  const objectId = "###";  // Please set the object ID.
  
  const hexColor = SpreadsheetApp.openById("spreadsheetId").getSheetByName("sheetName").getRange("A1").getValue();
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  var obj = slide.getShapes().filter(s => s.getObjectId() == objectId);
  if (obj.length > 0) obj[0].getFill().setSolidFill(hexColor);
}

Mẫu 2:

Trong mẫu này, màu sắc của hình dạng được thay đổi bằng cách sử dụng loại hình dạng của hình dạng trong trang trình bày đầu tiên trên Google Trang trình bày. Trong mẫu này, màu hex được truy xuất từ ​​ô "A1" của Bảng tính và màu của các hình dạng "RECTANGLE" được thay đổi. Vui lòng đặt ID bảng tính, tên trang tính và ID bản trình bày. Vui lòng chọn kiểu hình dạng từ Enum ShapeType .

Kịch bản mẫu:

function myFunction() {
  const shapeType = "RECTANGLE";  // Please set the shape type.
  
  const hexColor = SpreadsheetApp.openById("spreadsheetId").getSheetByName("sheetName").getRange("A1").getValue();
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  var objs = slide.getShapes().filter(s => s.getShapeType() == SlidesApp.ShapeType[shapeType]);
  if (objs.length > 0) {
    objs.forEach(obj => obj.getFill().setSolidFill(hexColor));
  }
}

Ghi chú:

  • Đây là những kịch bản mẫu đơn giản. Vì vậy, khi bạn sử dụng script, hãy sửa đổi nó cho phù hợp với tình hình thực tế của bạn.

Người giới thiệu:

  • setSolidFill (hexString)
  • getObjectId ()
  • getShapeType ()
  • Enum ShapeType

Đã thêm 1:

Khi bạn muốn truy xuất ID đối tượng của tất cả được định hình trong một trang chiếu, bạn có thể sử dụng tập lệnh sau.

Kịch bản mẫu:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • Trong trường hợp này, ID đối tượng của tất cả các hình dạng trong trang chiếu thứ nhất được đặt trong một mảng.

Đã thêm 2:

Ví dụ: khi màu của tất cả các hình dạng trong trang trình bày thứ nhất trong Google Trang trình bày được thay đổi thành màu đỏ, thì có thể sử dụng tập lệnh sau. Khi bạn muốn chọn một trong các hình dạng bằng cách sử dụng ID đối tượng, trước tiên, vui lòng truy xuất ID đối tượng bằng cách sử dụng tập lệnh của "Đã thêm 1" và sử dụng tập lệnh của "Mẫu 1".

Kịch bản mẫu:

function myFunction() {
  const hexColor = "#ff0000";  // This is a red color.
  const slide = SlidesApp.openById(presentationId).getSlides()[0];
  const shapes = slide.getShapes();
  if (shapes.length > 0) {
    shapes.forEach(obj => obj.getFill().setSolidFill(hexColor));
  }
}

Đã thêm 3:

Về can the pattern 1 script use an array (I need to change colours of several shapes, not just one), từ yêu cầu bổ sung của bạn can you please show me how to adjust the pattern 1 script to work with an array?, tôi đã thêm một tập lệnh mẫu nữa như sau.

Trong mẫu này, lúc đầu, vui lòng đặt ID đối tượng và màu hex objectIds. Bằng cách này, màu sắc của các hình dạng của trang trình bày thứ nhất có thể được thay đổi.

Kịch bản mẫu:

function myFunction() {
  const objectIds = [
    {objectId: "###", hexColor: "###"},
    {objectId: "###", hexColor: "###"},
    ,
    ,
    ,
  ];
  
  const slide = SlidesApp.openById("presentationId").getSlides()[0];
  const shapeObjects = slide.getShapes().reduce((o, s) => Object.assign(o, {[s.getObjectId()]: s}), {});
  objectIds.forEach(({objectId, hexColor}) => {
    if (shapeObjects[objectId]) shapeObjects[objectId].getFill().setSolidFill(hexColor);
  });
}

Ghi chú:

  • Đây là một kịch bản mẫu đơn giản. Vì vậy, hãy sửa đổi nó cho tình hình thực tế của bạn.