Google Apps Script do ustawiania koloru kształtu
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
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.