Google App脚本抓取行号

时间:2017-05-14 05:33:39

标签: google-apps-script google-sheets google-apps

我到处寻找并看到了这个板上的相关问题,但我真的被卡住了。

我需要捕获Sheet的实际行值,迭代基于if语句的for循环。

在代码的其他部分,我必须创建Form的响应表的副本并将其移动到文件夹。我正在尝试将正在创建的新文件的文件ID记录到已存在的工作表中(并且从菜单中调用脚本)。

我可以获取数据和值并迭代它们并查看日志中的所有内容。基于我在其他类似问题中看到的内容,我尝试了getActiveRange()。getRow()部分 - 但它只适用于窗体打开时光标所在的确切行。我需要能够根据脚本在进行for循环时当前正在查看的行动态设置ActiveRow变量。

我不能将for循环变量用作我当前的行(j + 1),因为if语句只查找字符串值" NOT FOUND"在专栏中 - 所以" j"变量值不一定与要更新的行值匹配。

非常感谢您的帮助!!

 // Get the active spreadsheet and the active sheet
 var ssEXD = SpreadsheetApp.getActive().getSheetByName('FormData');
 var lastRowEXD = ssEXD.getLastRow();
 var lastColumnEXD = ssEXD.getLastColumn();
 var formIDValues = ssEXD.getSheetValues(2, 1, lastRowEXD-1, lastColumnEXD);

 //Loop through the returned values
 for(var j = 0; j < formIDValues.length; j++) {    

   //if NOT FOUND is true, do stuff
   if (formIDValues[j][6] == "NOT_FOUND") {

     //need this variable to be the exact row of the sheet value data
     var ActiveRow = ssEXD.getActiveRange().getRow();
     //I need to use the ActiveRow in the getActiveRange to update the sheet with some information. 
     ssEXD.getRange(ActiveRow,6,1).setValue("testing"); 

   } 

}

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,您的数据在第一行有一个列名,而数据从第二行开始。

所以我认为这将实现你想要的。

 var ssEXD = SpreadsheetApp.getActive().getSheetByName('FormData');
 var lastRowEXD = ssEXD.getLastRow();
 var lastColumnEXD = ssEXD.getLastColumn();
 var dataR = ssEXD.getDataRange();
 var dataA = dataR.getValues();
 for(var j = 1; j < dataA.length; j++) 
 {    
   if (dataA[j][6] == "NOT_FOUND") 
   {
     dataA[j][6] = "testing";
   }
 }  
 dataR.setValues(dataA); 

答案 1 :(得分:0)

var ActiveRow = j + 2;

从工作表中提取数组(formIDValues)后,该数组与该工作表之间没有更多关系。必须将数组中正在处理的项目的索引调整为电子表格中的行号。

j - 数组索引 - 从零开始,这是此电子表格中的第二行,因此j + 2

您对j变量的担忧是没有根据的。无论是否通过任何测试,j都会在每次循环中递增。