Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11855
Последний выпуск: 19.06.2015

Не передаётся массив в функцию (JavaScript)

482
23 февраля 2016 года
[FENIX]
80 / / 29.01.2007
Всем привет! Народ, вот такая вот проблема. Нужно чтобы при редактировании ячейки в Google-таблице срабатывала функция.

Я передаю в качестве параметра функции - двумерный массив, но вот почему то 2-ю размерность массива функция ну ни в какую воспринимать не хочет. Подскажите, что не так?

Ссылка на Google-таблицу: https://docs.google.com/spreadsheets/d/1TlZS9gE3i6...
Скрипт:
Код:
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, файл Код)

Я уже голову сломал, не знаю что тут делать, помогите пожалуйста.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог