Google Apps Script do ustawiania koloru kształtu

Aug 26 2020

Przeglądałem tutaj odniesienie do Google Apps Script i zauważyłem, że istnieje metoda setSolidFill(color).

Zastanawiałem się, czy możliwe jest napisanie skryptu Aplikacji Google do ustawiania kolorów kształtów na podstawie wartości / odniesienia wyszukiwania w Arkuszu Google? Zasadniczo ustawić kolor kształtu # 001 w Prezentacjach Google na kod HEX w A2 arkusza Google?

Odpowiedzi

3 Tanaike Aug 26 2020 at 14:19

Zastanawiam się, czy można ustawić kolory kształtów na podstawie kodów kolorów znalezionych w Arkuszu Google.

Myślę, że twój cel można osiągnąć. Aby więc pomóc zrozumieć metodę osiągnięcia celu, zaproponowałem następujące 2 wzorce.

Wzór 1:

W tym wzorze kolor kształtu jest zmieniany przy użyciu identyfikatora obiektu kształtu na pierwszym slajdzie w Prezentacjach Google. W tym przykładzie kolor szesnastkowy jest pobierany z komórki „A1” arkusza kalkulacyjnego. Ustaw identyfikator arkusza kalkulacyjnego, nazwę arkusza i identyfikator prezentacji.

Przykładowy skrypt:

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

Wzór 2:

W tym wzorze kolor kształtu jest zmieniany przy użyciu typu kształtu kształtu na pierwszym slajdzie w Prezentacjach Google. W tym przykładzie kolor szesnastkowy jest pobierany z komórki „A1” arkusza kalkulacyjnego, a kolor kształtów „PROSTOKĄT” jest zmieniany. Ustaw identyfikator arkusza kalkulacyjnego, nazwę arkusza i identyfikator prezentacji. Wybierz typ kształtu z Enum ShapeType .

Przykładowy skrypt:

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

Uwaga:

  • Oto proste przykładowe skrypty. Więc kiedy używasz skryptu, zmodyfikuj go pod kątem swojej aktualnej sytuacji.

Bibliografia:

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

Dodano 1:

Jeśli chcesz pobrać identyfikatory obiektów wszystkich kształtów na slajdzie, możesz użyć następującego skryptu.

Przykładowy skrypt:

const slide = SlidesApp.openById(presentationId).getSlides()[0];
const objectIds = slide.getShapes().map(s => s.getObjectId());
console.log(objectIds)
  • W tym przypadku identyfikatory obiektów wszystkich kształtów na pierwszym slajdzie są umieszczane w tablicy.

Dodano 2:

Na przykład, gdy kolory wszystkich kształtów na pierwszym slajdzie w Prezentacjach Google zostaną zmienione na kolor czerwony, można użyć następującego skryptu. Jeśli chcesz wybrać jeden z kształtów za pomocą identyfikatora obiektu, najpierw pobierz identyfikatory obiektów za pomocą skryptu „Dodano 1” i użyj skryptu „Wzorzec 1”.

Przykładowy skrypt:

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

Dodano 3:

O can the pattern 1 script use an array (I need to change colours of several shapes, not just one), z Twojej dodatkowej prośby o can you please show me how to adjust the pattern 1 script to work with an array?, dodałem jeszcze jeden przykładowy skrypt w następujący sposób.

W tym przykładzie najpierw ustaw identyfikatory obiektów i kolory szesnastkowe w objectIds. W ten sposób można zmienić kolory kształtów pierwszego slajdu.

Przykładowy skrypt:

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

Uwaga:

  • To jest prosty przykładowy skrypt. Więc zmodyfikuj go do swojej aktualnej sytuacji.