Контакты
Местоположение
Россия, Тюменская обл. и Ханты-Мансийский АО, Нижневартовск

Наибольший вклад в теги

Все теги (6)

Лучшие ответы пользователя

Все ответы (3)
  • Как оптимизировать код и исправить ошибку Exceeded maximum execution time?

    aekozhevnikov
    @aekozhevnikov
    hungryking
    Вот что вам поможет:
    1. Установите библиотеку batch request
    2. Включите DriveAPI и DocsAPI в консоли разработчика
    3. Вставьте код ниже в файл своего проекта, заполните постоянные переменные, замените название листа если вам необходимо и запускайте функцию Creator()

    /**
     * Переменная LIST получает данные с листа с названием 1 которые содержаться в 1 и 2 колонке
     * номер и фио
     * Заполните sampleID и folderID
     */
    
    const sampleID = "ID вашего файла"
    const folderID = "ID папки где будут создаваться копии"
    const LIST = SpreadsheetApp.getActiveSpreadsheet()
      .getSheetByName('1')
      .getDataRange()
      .getValues()
      .filter(f => f[0] != "")
      .map(f => [f[0], f[1]]);
    
    /** 
     * Функция для создания n копий документа и замены текста в нем
     * данная функция создает количество документов, равное количеству строк в массиве LIST
     * После она запускет функцию batchUpdate() которая берет вновь созданные копии и заменяет в них данные, по строкам для кадого документа
     */
    
    function Creator() {
      var requests = LIST.map(([b1, a2]) => {
        return {
          method: "POST",
          endpoint: `https://www.googleapis.com/drive/v3/files/${sampleID}/copy`,
          requestBody: {
            parents: [folderID], name: `Договор № ${b1} с ${a2}` // заполните здесь название которое вам нужно что бы получилось
          }
        }
      });
      var res = BatchRequest.EDo({
        batchPath: "batch/drive/v3",
        requests: requests,
      });
      console.log(res);
      batchUpdate(res);
    }
    
    function batchUpdate(res) {
      var IDS = res.map((item) => {
        return item.id;
      });
      concatArrays(LIST, IDS).forEach(([num, name, id]) => {
        const requests = [
          { replaceAllText: { replaceText: String(num), containsText: { text: "<номер>", matchCase: false } } }, // обязательно используем String() для преобразования чисел в текст
          { replaceAllText: { replaceText: name, containsText: { text: "<фио>", matchCase: false } } }
        ];
        const res = Docs.Documents.batchUpdate({ requests }, id);
        console.log(JSon.stringify(res, null, 2));
    
        // Utilities.sleep(5000); // Если документов много, может потребоваться использовать скорректированное время ожидания.
      });
    }
    
    /** 
     * Эта функция соединяет два массива вместе
     * @param {object} arr1 первый массив, к которму нужно добавить второй массив.
     * @param {object} arr2 второй массив который будем добавлять к первому.
     * @return {object} возвращает объединенный массив
     */
    
    function concatArrays(arr1, arr2) {
      let result = [];
      arr1.forEach((sub, i) => {
        let newSubArr = sub.concat(arr2[i]);
        result.push(newSubArr);
      });
      return result;
    }
    Ответ написан
    2 комментария
  • Как передавать данные при добавлении новой записи?

    aekozhevnikov
    @aekozhevnikov
    hungryking
    Для автоматической отправки данных в Telegram при добавлении новых записей в Google Таблицу можно использовать триггер onFormSubmit, если данные добавляются через Google Формы, или триггер onChange для отслеживания любых изменений в таблице, включая добавление строк.
    Ответ написан
    Комментировать