Google Apps Script เพื่อกำหนดสีของรูปร่าง

Aug 26 2020

ฉันถูกมองผ่านการอ้างอิงของ Google Apps Script ที่นี่setSolidFill(color)และพบมีการใช้วิธีการสำหรับ

ฉันสงสัยว่าเป็นไปได้ไหมที่จะเขียน Google Apps Script เพื่อกำหนดสีรูปร่างตามค่า / การอ้างอิงการค้นหาใน Google Sheet กำหนดสีของ Shape # 001 ใน Google สไลด์เป็นรหัส HEX ใน A2 ของ Google Sheet หรือไม่

คำตอบ

3 Tanaike Aug 26 2020 at 14:19

ฉันสงสัยว่าเป็นไปได้ไหมที่จะกำหนดสีรูปร่างตามรหัสสีที่พบใน Google ชีต

ฉันคิดว่าเป้าหมายของคุณสามารถบรรลุได้ ดังนั้นเพื่อช่วยให้เข้าใจเกี่ยวกับวิธีการบรรลุเป้าหมายของคุณฉันจึงเสนอ 2 รูปแบบต่อไปนี้

รูปแบบที่ 1:

ในรูปแบบนี้สีของรูปร่างจะเปลี่ยนโดยใช้รหัสวัตถุของรูปร่างในสไลด์แรกบน Google สไลด์ ในตัวอย่างนี้สีฐานสิบหกจะถูกดึงมาจากเซลล์ "A1" ของสเปรดชีต โปรดตั้งรหัสสเปรดชีตชื่อแผ่นงานและรหัสงานนำเสนอ

สคริปต์ตัวอย่าง:

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

รูปแบบ 2:

ในรูปแบบนี้สีของรูปร่างจะเปลี่ยนโดยใช้ประเภทรูปร่างของรูปร่างในสไลด์แรกบน Google สไลด์ ในตัวอย่างนี้สีฐานสิบหกจะถูกดึงมาจากเซลล์ "A1" ของสเปรดชีตและสีของรูปร่าง "RECTANGLE" จะเปลี่ยนไป โปรดตั้งรหัสสเปรดชีตชื่อแผ่นงานและรหัสงานนำเสนอ โปรดเลือกประเภทรูปร่างจากEnum ShapeType

สคริปต์ตัวอย่าง:

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

บันทึก:

  • นี่คือสคริปต์ตัวอย่างง่ายๆ ดังนั้นเมื่อคุณใช้สคริปต์โปรดแก้ไขตามสถานการณ์จริงของคุณ

อ้างอิง:

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

เพิ่ม 1:

เมื่อคุณต้องการดึง ID อ็อบเจ็กต์ที่มีรูปร่างทั้งหมดในสไลด์คุณสามารถใช้สคริปต์ต่อไปนี้

สคริปต์ตัวอย่าง:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • ในกรณีนี้ ID ออบเจ็กต์ของรูปร่างทั้งหมดในสไลด์ที่ 1 จะถูกใส่ในอาร์เรย์

เพิ่ม 2:

ตัวอย่างเช่นเมื่อสีของรูปร่างทั้งหมดในสไลด์ที่ 1 ใน Google สไลด์เปลี่ยนเป็นสีแดงคุณสามารถใช้สคริปต์ต่อไปนี้ได้ เมื่อคุณต้องการเลือกหนึ่งในรูปร่างโดยใช้ ID อ็อบเจ็กต์ในตอนแรกโปรดดึง ID อ็อบเจ็กต์โดยใช้สคริปต์ "เพิ่ม 1" และใช้สคริปต์ของ "Pattern 1"

สคริปต์ตัวอย่าง:

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

เพิ่ม 3:

เกี่ยวกับcan the pattern 1 script use an array (I need to change colours of several shapes, not just one)คำขอเพิ่มเติมของcan you please show me how to adjust the pattern 1 script to work with an array?คุณฉันได้เพิ่มสคริปต์ตัวอย่างอีกหนึ่งรายการดังนี้

ในตัวอย่างนี้ในตอนแรกโปรดตั้งรหัสวัตถุและสีฐานสิบหกobjectIdsเป็น ด้วยวิธีนี้สีของรูปร่างของสไลด์ที่ 1 สามารถเปลี่ยนแปลงได้

สคริปต์ตัวอย่าง:

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

บันทึก:

  • นี่คือสคริปต์ตัวอย่างง่ายๆ ดังนั้นโปรดแก้ไขตามสถานการณ์จริงของคุณ