@mr_arab

Как автоматизировать вызов скрипта для гугл таблиц?

Добрый день,уважаемые!
Такая ситуация... Есть две гугл таблицы в одной хранятся данные про задачи: название задачи, время начала, конца, продолжительность. Эти данные импортируются во вторую таблицу (импортируются при помощи importrange) в которой, происходит дальнейшая работа с данными.
При добавлении строк в таблицу, из которой берутся данные, во второй таблице просто изменялся размер вставляемого диапазона, но вписанные до этого данные и закраска не передвигались. Для решения этой проблемы были написаны два скрипта. Скрипт 1 - крепится к таблице из которой берутся данные, для его работы необходимо две ячейки - в одну он записывает значение первой ячейки столбца А, т.е. туда попадает следую значение после добавленной нами строки( тобишь значение, которое перемещается при добавлении строк), во вторую помещается количество добавленных строк. Второй скрипт, активируется при нажатии кнопки (она вынесена в меню сверху) и при нахождении нашего значения, которое мы определили при помощи первого скрипта, то он запоминает его и уже далее добавляет перед ним строки столько раз, сколько мы определили при помощи скрипта №1.

Необходимо, чтобы скрипт, который добавляет строки активировался автоматически при добавлении строк в таблице 1 (из которой берутся данные), как это сделать подскажите, пожайлуста

Прикрепляю ссылки на таблицы:
Таблица 1 из которой берутся данные для главной таблицы: https://docs.google.com/spreadsheets/d/1vnKTdIZ3O4...

Таблица 2 в которую импортируюся данные и в которой необходима автоматизация скрипта: https://docs.google.com/spreadsheets/d/1nu-cqtMMoM...

Так же прикрепляю отдельно код:
Скрипт 1
function onEdit(e) {//функция вызываемая при любом изменении в таблице
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1");//берём лист на котором мы работаем
  var startRow = e.range.getRow();// Получаем начальную строку редактируемого диапазона
  var numRows = e.range.getNumRows();// Получить количество строк в редактируемом диапазоне
  var firstCell = sheet.getRange(startRow+numRows, 1);//берём диапазон в виде одной ячейки,и запихиваем туда ячейку, которую мы передвигаем
  var firstCellValue = firstCell.getValue();//вычисляем значение находящиеся в ячейке
  var savedCell = sheet.getRange("A1");//куда сохраним значении первой ячейки столбца "А", строки которую мы переместили
  var savedCell1 = sheet.getRange("A2");//куда сохраним кол-во строк, которые мы добавили
  savedCell.setValue(firstCellValue);//вычисляем строку, которая переместилась в результате добавления
  savedCell1.setValue(numRows);//сохраняем количество строк, которые мы добавили
}

Скрипт 2
function myFunction1() {///необходима функция, которая вызывается сразу при любом изменении таблицы
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист2");//получаем активный лист
  var range = sheet.getRange("A3:D"); // получаем диапазон с листа
  var numRows = range.getNumRows();//кол-во строк
  var temp;//переменная необходимая для хранения строки, в которой находится нужное нам значение
  var savedCellMain = sheet.getRange("A1");//Где хранится значение с которым мы сравниваем
  var savedCellMain1 = sheet.getRange("A2");//Кол-во добавленных строк
  for (var i = 1; i < numRows; i++){ //пробегаем по нашему диапазону до количества строк
    var firstCell = range.getCell(i, 1);//первая ячейка столбца А
    if(firstCell.getValue() == savedCellMain.getValue()){//если значение, которое мы сейчас проходим, равно значению, которое мы определили в нач таблице
      temp = firstCell.getRow();//запоминаем строку в которой находится нужное нам значение
      break;//выходим из цикла
    }
  }
  var end = savedCellMain1.getValue();//считываем значение(количество строк)
  for (var i = 1;i<=end;i++){//пробегаем от 1 до количетсва строк
    sheet.insertRowBefore(temp-end);//вставляем строку 
    var lastColumn = sheet.getLastColumn();//вычисляем последний столбик
    var range = sheet.getRange(temp-end,1,1,lastColumn);//выделяем диапазон
    range.setBackground(null);//делаем заливку выбранного диапазона белой (т.е её отсуствие)
  }
}

Подскажите пожайлуса, как автоматизовать вызов скрипта 2
  • Вопрос задан
  • 468 просмотров
Решения вопроса 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Задача, как я понял, сводится к тому, чтобы при изменении данных в первом Spreadsheet (и запуске первого скрипта) - автоматически запускать скрипт во втором Spreadsheet.
Думаю лучшим вариантом будет доработать первый скрипт, чтобы при его срабатывании, он также "открывал" второй Spreadsheet и вносил туда изменения.
Открыть второй Spreadsheet из первого можно так:
var ss = SpreadsheetApp.openById("[id]");
потом обратиться к нужному листу:
var sheet2 = ss.getSheetByName("Лист2");

и далее - перенести код из второго скрипта в первый, адаптируя его для работы с sheet2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы