Замените заполнители в группах фигур Google слайд с помощью appscript

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

И

https://script.google.com/u/0/home/projects/13-f6TrIUFYpN1qtkITIgX4-zd1fDtTTsJkDSMgkSiOjX_aibaVjQhG3Z/edit

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Доступ к текстовым полям соответственно

Когда я исследовал вашу выборочную группу, я заметил, что текстовые поля не принадлежали одной группе. Я советую группировать несколько текстовых полей внутри фигур, чтобы к ним было легче получить доступ. Один был глубже другого. Изучив уровни, я придумал следующий скрипт для доступа и увеличения чисел при дублировании фигур.

Скрипт

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:

Использованная литература:

Пожалуйста, не стесняйтесь спрашивать что-либо относительно ответа, опубликованного выше.

PatrickdC 08.07.2024 18:52

Когда я создаю 15 копий, создается 12 и на 2-й странице возникает ошибка, она сбрасывается на {{NAME1}}

Esat Kurtul 08.07.2024 19:46

Отредактировал код, сделав его короче. Я увидел повторяющиеся шаблоны в коде, поэтому мне пришлось его сократить.

PatrickdC 08.07.2024 21:28

Пожалуйста, дайте мне знать, сработало ли это на вашей стороне или все еще есть ошибки.

PatrickdC 08.07.2024 22:04

Меня интересует стиль группировки рисунков и текста. Как вы это сделали в таком порядке?

Esat Kurtul 08.07.2024 22:17

Ваш оригинальный сценарий уже работал, за исключением текстов. Он дублировал вашу группу образцов. Я просто добавил несколько строк кода, чтобы напрямую указывать и изменять текст в текстовом поле. Тем не менее, я вручную проверял, какая группа/ребенок содержит тексты, так что это действительно было сложной задачей.

PatrickdC 08.07.2024 22:32

Другие вопросы по теме