在Array中获取活动行

时间:2015-06-02 14:09:03

标签: google-apps-script google-sheets

我有这个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"
    }  
 }

2 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,可以通过向i添加1来获得行号。

例如,当您循环遍历电子表格行数组时,您可以执行以下操作:

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

+1的原因是Array被索引为零(从第0行开始计数),而Google Spreadsheet函数在第1行开始计数。

答案 1 :(得分:1)

您的代码似乎来自Tony Hirst的this blog

您会在Create Google Calendar Events from Spreadsheet but prevent duplicates中找到它的更新版本,它会记录事件ID,以便记住哪一行已被处理,以及提供一个返回日历事件的链接。

它不是计算单个电子表格行,而是记录data数组中的所有更新,然后在单个操作中更新电子表格。这比许多写入速度快,存在脚本在更新工作表之前因超过6分钟执行限制而中断的风险。