Всем привет! Народ, вот такая вот проблема. Нужно чтобы при редактировании ячейки в Google-таблице срабатывала функция.
Я передаю в качестве параметра функции - двумерный массив, но вот почему то 2-ю размерность массива функция ну ни в какую воспринимать не хочет
Подскажите, что не так?
Ссылка на Google-таблицу:
https://docs.google.com/spreadsheets...it?usp=sharing
Скрипт:
function onEdit(event){
var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
var sheet = ss.getActiveSheet();//получаем активный лист,например "Отправили КП", "В работе", и т.д. Из ячеек активного листа
//данные надо копировать на лист "Данные"
//Получаем активную (редактируемую) ячейку
var range=SpreadsheetApp.getActiveRange();//Изменяемая ячейка
var curRow=range.getRowIndex();//Текущий номер строки
var curCol=range.getColumn();//Текущий номер столбца
var arr = new Array(1000);//Массив из 1000 строк - туда сохраняем данные строки
var range;// = sheet.getRange(1,1);
var count=0;
var i=6;//Данные начинаются с 6-й строки, поэтому просмотр начинаем с 6. Как только строка пустая - останавливаем счёт
//Это нужно для того, чтобы знать, сколько строк выделять под массив. Столбцов будет около 17-19 (по наибольшей таблице)
while(i<1000 && sheet.getRange(i,2).getValue()!="")
{
count++;
i++;
}
//range=sheet.getRange(1,1).setValue(count);
for(var k=0;k<count;k++)
{
arr[k]=new Array(18);//В кажой строке 16 столбцов. Всего count строк
for(var i=0;i<19; i++)
{
range=sheet.getRange(6,i+1);
var data = range.getValue();
arr[k][i]=data;
//sheet.getRange(2,i+1).setValue(arr[k][i]);//Вывод массива в ячейки для тестирования
}
}
//sheet.getRange(1,1).setValue(findInColumn("B",15));
//sheet.getRange(1,1).setValue(arr[0][1]);
record_in_table(arr);
}
//Передаём в функцию наш заполненный массив.
function record_in_table(arr)
{
var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
//Копируем данные из "Отправили КП" в "Данные"
var sheet = ss.getSheetByName("Данные");//получаем лист по его названию,например "Данные", "Отправили КП", "В работе"
//Теперь надо определить, в какую именно строку заносить данные
//Надо взять из массива значение arr[0][1], arr[1][1], arr[2][1] и т.д. - это значения индексов, в по этим индексам вставлять в таблицу "Данные"
//все остальные значения
//var index=arr[0][1];
//Теперь во вкладке "Данные" надо найти этот индекс, таким образом мы определим, какую строку надо обновить
//var columnValues=sheet.getRange("A1:A20");//По мере заполнения таблицы диапазон будет меняться
for(var j=0; j<arr.length; j++)
{
var index=findInColumn("A",arr[j][1]);//Если вернулось какое то значение - значит идёт обновление данных,
//если вернулось "-1", значит будет добавление данных в лист "Данные", т.е. добавление полностью новой строки
if(index!=-1)
{
var range=sheet.getRange(index,3).setValue(arr[j][2]);//Дата поступления
range=sheet.getRange(index,6).setValue(arr[j][5]);//Название компании
range=sheet.getRange(index,8).setValue(arr[j][10]);//Комментарий
range=sheet.getRange(index,12).setValue(arr[j][9]);//Первичный запрос
range=sheet.getRange(index,14).setValue(arr[j][11]);//Телефон
range=sheet.getRange(index,16).setValue(arr[j][6]);//Контактное лицо
range=sheet.getRange(index,17).setValue(arr[j][7]);//Должность контактного лица
range=sheet.getRange(index,18).setValue(arr[j][8]);//Имя директора
range=sheet.getRange(index,20).setValue(arr[j][13]);//Ожидаемая сумма сделки
range=sheet.getRange(index,21).setValue(arr[j][14]);//Реальная сумма сделки
range=sheet.getRange(index,22).setValue(arr[j][15]);//Стратегия на пол года
range=sheet.getRange(index,23).setValue(arr[j][16]);//Дата оплаты
}
else
{
//Тут надо вызвать функцию добавления новой строки в лист "Данные" из массива arr[][]
//AddrRow(arr);
}
}//for
}
function AddRow(arr)
{
var ss=SpreadsheetApp.getActiveSpreadsheet();//Получили активный документ (активную таблицу)
//Копируем данные из "Отправили КП" в "Данные"
var sheet = ss.getSheetByName("Данные");//получаем лист по его названию,например "Данные", "Отправили КП", "В работе"
//Ищем индекс строки для вставки - это первая свободная строка таблицы "Данные"
var index=1;
while(index<=1000 && sheet.getRange(index,3).getValue()!="")
index++;
var range=sheet.getRange(index,3).setValue(arr[0][2]);//Дата поступления
range=sheet.getRange(index,6).setValue(arr[0][5]);//Название компании
range=sheet.getRange(index,8).setValue(arr[0][10]);//Комментарий
range=sheet.getRange(index,12).setValue(arr[0][9]);//Первичный запрос
range=sheet.getRange(index,14).setValue(arr[0][11]);//Телефон
range=sheet.getRange(index,16).setValue(arr[0][6]);//Контактное лицо
range=sheet.getRange(index,17).setValue(arr[0][7]);//Должность контактного лица
range=sheet.getRange(index,18).setValue(arr[0][8]);//Имя директора
range=sheet.getRange(index,20).setValue(arr[0][13]);//Ожидаемая сумма сделки
range=sheet.getRange(index,21).setValue(arr[0][14]);//Реальная сумма сделки
range=sheet.getRange(index,22).setValue(arr[0][15]);//Стратегия на пол года
range=sheet.getRange(index,23).setValue(arr[0][16]);//Дата оплаты
}
//Функция ищет позицию данных data в указанном столбце column, и возвращает индекс той строки, где встретились указанные данные data
function findInColumn(column, data) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Данные");
var column = sheet.getRange(column + ":" + column); // like A:A
var values = column.getValues(); //Получаем все значения столбца column
var row = 0;
while ( values[row] && values[row][0] !== data ) {
row++;
}
if (values[row][0] === data)
return row+1;
else
return -1;
}
Триггеры настроил на изменение таблицы.
Ошибка вылазиет вот тут:
var index=findInColumn("A",arr[j][1]);
Google-script пишет TypeError: Не удается прочитать свойство "1" объекта undefined. (строка 73, файл Код)
Я уже голову сломал, не знаю что тут делать, помогите пожалуйста.