2015-06-02 2 views
0

У меня есть этот скрипт Google Apps для чтения строк из электронной таблицы Google, но мне нужно узнать номер строки активного элемента массива.Получить активную строку внутри массива

Цель состоит в том, чтобы проверить, была ли строка обработана или нет (statusverwerkt переменная). Если значение statusverwerkt является x создать событие Google в календаре, и я хочу, чтобы изменить значения statusverwerkt к yes

Там может быть другой способ сделать это, но было бы полезно узнать текущую строку в элементе массива.

Это мой код:

function caltest1() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = SpreadsheetApp.getActiveSheet().getLastRow(); 
    var Totalrows = sheet.getDataRange(); 
    var TotalNumrows = Totalrows.getNumRows(); 
    var Reservations = range-1; 
    var startRow = 2; // First row of data to process 
    var numRows = Reservations; // Number of rows to process 
    var dataRange = sheet.getRange(startRow, 1, numRows, 17); 
    var data = dataRange.getValues(); 
    var cal = CalendarApp.getDefaultCalendar(); 
    for (i in data) { 
    var row = data[i]; 
    var title = row[2]; // First column 
    var desc = row[7];  // Second column 
    var tstart = row[9]; 
    var tstop = row[10]; 
    var loc = row[3]; 

    var statusverwerkt = row[14]; 

    if (statusverwerkt = "x"){ 

    cal.createEvent(title, new Date(tstart), new Date(tstop), {description:desc,location:loc}); 

    //set statusverwerkt value = "yes" 


    } 
    else { 

    // statusverwerkt = "x" 
    } 
} 

ответ

1

Ваш код, похоже, пришел от this blog от Tony Hirst.

Вы найдете обновленную версию в Create Google Calendar Events from Spreadsheet but prevent duplicates, в которой записывается идентификатор события, чтобы как запомнить, какая строка была обработана, так и предоставить ссылку на событие календаря.

Вместо вычисления отдельной таблицы электронных таблиц он записывает все обновления в массиве data, а затем обновляет электронную таблицу за одну операцию. Это быстрее, чем многие записи, с риском, что сценарий может быть прерван для превышения 6-минутного предела выполнения перед обновлением листа.

+0

да Код действительно Тони Херст – user1292411

+0

Я использовал код как в вашем ответе, и это действительно помогло мне! – user1292411

1

Если я правильно понимаю ваш вопрос, номер строки легко доступен путем добавления 1 к I.

Например, как вы цикл через массив строк электронной таблицы можно сделать:

for (i in data) { 
    var row_number = i+1; 

Причиной +1 является то, что массив индексируется равен нуль (начинает отсчет в строке 0), в то время как Функции Google Spreadsheet начинаются с подсчета в строке 1.

+0

Я только начинаю обрабатывать из строки 2. Я все же пробовал код и преобразовал row_number в число. Затем я пытаюсь выполнить следующий код: 'SpreadsheetApp.getActiveSheet(). GetRange ('Q', row_number) .setValue ('verwerkt');' и получить ошибку _Cannot преобразовать Q в (класс). (строка 40, файл «ScriptCalendar») _ – user1292411

+0

Если вы начинаете данные в строке 2 в электронной таблице, вам нужно добавить 2 к i. Строка 0 в вашем массиве - строка 2 в вашей таблице. В своем комментарии вы не используете getRange() правильно. Вы можете либо передать одно значение String EG 'getRange ('A2') // row 2, столбец A'or, вы можете передать два числовых значения, один для строки и один для столбца:' getRange (2,1)// строка 2, столбец 1'. Лично я предпочитаю последний, потому что вы можете просто работать с числами, но если вы предпочитаете использовать нотацию «A1», вам нужно присоединить номер строки к вашей строке: 'getRange ('Q' + row_number);' –

Смежные вопросы