function copyShapes(copyCount) {
const presentation = SlidesApp.getActivePresentation();
const slide = presentation.getSlides()[0];
let group = slide.getGroups()[0];
const xIncrement = 10;
const yIncrement = 5.5;
const initialX = 0.25;
const initialY = 1;
const maxCopiesPerPage = 10;
for (let i = 0; i < copyCount; i++) {
if (i % maxCopiesPerPage === 0) {
if (i > 0) {
group = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK).insertGroup(group);
}
} else {
const positionIndex = i % maxCopiesPerPage;
const row = Math.floor(positionIndex / 2);
const col = positionIndex % 2;
const x = cmToPoints(initialX + col * xIncrement);
const y = cmToPoints(initialY + row * yIncrement);
group.duplicate().setLeft(x).setTop(y);
}
}
}
Прежде всего, в Google Slide есть 1 группа фигур. Вот сколько копий я хочу, копии группы фигур создаются в соответствии с их позициями. но в группе есть заполнители: {{NAME1}} и {{PRICE1}}, {{NAME1}}, {{NAME2}}, {{NAME3}} и т. д. для такого количества заполнителей, сколько я хочу создать копии . {{PRICE1}},{{PRICE2}},{{PRICE3}} Пусть копии меняются так, например, если я хочу 4 копии{{PRICE1}},{{PRICE2}},{{PRICE3}},{{PRICE4}} И {{NAME1}}, {{NAME2}},{{NAME3}},{{NAME4}} Пусть это меняется одно за другим вот так
https://docs.google.com/presentation/d/1qFbwRUB4aCnfpMGIhMc_eCpKEMTZPkqHH52khxDJh6o/edit#slide=id.p
И
Когда я исследовал вашу выборочную группу, я заметил, что текстовые поля не принадлежали одной группе. Я советую группировать несколько текстовых полей внутри фигур, чтобы к ним было легче получить доступ. Один был глубже другого. Изучив уровни, я придумал следующий скрипт для доступа и увеличения чисел при дублировании фигур.
function copyShapes(copyCount) {
const presentation = SlidesApp.getActivePresentation();
const xIncrement = 10;
const yIncrement = 5;
const initialX = 0;
const initialY = 0.5;
const maxCopiesPerPage = 10;
var slide = presentation.getSlides()[0];
for (let i = 0; i < copyCount; i++) {
var slideNumber = Math.floor(i / maxCopiesPerPage);
var group = slide.getGroups()[0];
const positionIndex = i % maxCopiesPerPage;
const row = Math.floor(positionIndex / 2);
const col = positionIndex % 2;
const x = cmToPoints(initialX + col * xIncrement);
const y = cmToPoints(initialY + row * yIncrement);
if (i % maxCopiesPerPage === 0) {
if (i > 0) {
group = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK).insertGroup(group);
slide = presentation.getSlides()[slideNumber];
}
} else {
group.duplicate().setLeft(x).setTop(y);
}
var newGroup = slide.getGroups()[i % maxCopiesPerPage];
newGroup.getChildren()[0].asGroup().getChildren()[4].asShape().getText().setText("{{NAME" + (i + 1) + "}}"); //Name was deeper than Price
newGroup.getChildren()[1].asShape().getText().setText("{{PRICE" + (i + 1) + "}}");
}
}
Это был мой результат, когда я установил количество дубликатов на 10:
Когда я создаю 15 копий, создается 12 и на 2-й странице возникает ошибка, она сбрасывается на {{NAME1}}
Отредактировал код, сделав его короче. Я увидел повторяющиеся шаблоны в коде, поэтому мне пришлось его сократить.
Пожалуйста, дайте мне знать, сработало ли это на вашей стороне или все еще есть ошибки.
Меня интересует стиль группировки рисунков и текста. Как вы это сделали в таком порядке?
Ваш оригинальный сценарий уже работал, за исключением текстов. Он дублировал вашу группу образцов. Я просто добавил несколько строк кода, чтобы напрямую указывать и изменять текст в текстовом поле. Тем не менее, я вручную проверял, какая группа/ребенок содержит тексты, так что это действительно было сложной задачей.
Пожалуйста, не стесняйтесь спрашивать что-либо относительно ответа, опубликованного выше.