Google apps script Google应用程序脚本捕获行数
我到处都找过了,在黑板上看到了相关的问题,但我真的被卡住了 我需要捕获一个工作表的实际行值,它在基于if语句的for循环中进行迭代 在代码的其他部分中,我必须创建表单响应表的副本并将其移动到文件夹中。我试图将正在创建的新文件的文件id记录到一个已经存在的工作表中(在该工作表中从菜单调用脚本) 我可以获取数据和值,并遍历它们,查看日志中的所有内容。根据我在其他类似问题中看到的情况,我尝试了getActiveRange().getRow()部分,但它只适用于窗体打开时光标所在的行。我需要能够根据脚本在for循环中当前查看的行动态设置ActiveRow变量 我不能将for循环变量用作当前行(j+1),因为if语句只在列中查找字符串值“notfound”-因此“j”变量值不一定与要更新的行值匹配 非常感谢您的帮助Google apps script Google应用程序脚本捕获行数,google-apps-script,google-sheets,google-apps,Google Apps Script,Google Sheets,Google Apps,我到处都找过了,在黑板上看到了相关的问题,但我真的被卡住了 我需要捕获一个工作表的实际行值,它在基于if语句的for循环中进行迭代 在代码的其他部分中,我必须创建表单响应表的副本并将其移动到文件夹中。我试图将正在创建的新文件的文件id记录到一个已经存在的工作表中(在该工作表中从菜单调用脚本) 我可以获取数据和值,并遍历它们,查看日志中的所有内容。根据我在其他类似问题中看到的情况,我尝试了getActiveRange().getRow()部分,但它只适用于窗体打开时光标所在的行。我需要能够根据脚本
// 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");
}
}
//获取活动电子表格和活动工作表
var ssEXD=SpreadsheetApp.getActive().getSheetByName('FormData');
var lastRowEXD=ssEXD.getLastRow();
var lastColumnEXD=ssEXD.getLastColumn();
var formIDValues=ssEXD.getSheetValues(2,1,lastRowEXD-1,lastColumnEXD);
//循环遍历返回的值
对于(var j=0;j
如果我正确阅读了您的问题,您的数据在第一行有一个列名,数据从第二行开始
所以我认为这将实现你想要的
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);
var ssEXD=SpreadsheetApp.getActive().getSheetByName('FormData');
var lastRowEXD=ssEXD.getLastRow();
var lastColumnEXD=ssEXD.getLastColumn();
var dataR=ssEXD.getDataRange();
var dataA=dataR.getValues();
对于(var j=1;j
如果我正确阅读了您的问题,您的数据在第一行有一个列名,数据从第二行开始
所以我认为这将实现你想要的
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);
var ssEXD=SpreadsheetApp.getActive().getSheetByName('FormData');
var lastRowEXD=ssEXD.getLastRow();
var lastColumnEXD=ssEXD.getLastColumn();
var dataR=ssEXD.getDataRange();
var dataA=dataR.getValues();
对于(var j=1;j
一旦从工作表中提取了一个数组(formidValue),该数组就不再与该工作表相关。必须将数组中正在处理的项目的索引调整为电子表格中的行号
j-数组索引-从零开始,这是该电子表格中的第二行,因此j+2
你对j变量的担心是没有根据的。无论是否通过任何测试,每次通过循环时j都会增加
一旦从工作表中提取了一个数组(formidValue),该数组就不再与该工作表相关。必须将数组中正在处理的项目的索引调整为电子表格中的行号
j-数组索引-从零开始,这是该电子表格中的第二行,因此j+2
你对j变量的担心是没有根据的。无论是否通过了任何测试,循环的每次通过都会增加j。Hi Cooper,感谢您的响应和代码更新。对于任何看到这一点的人,只要提醒您更新数组列值,因为您从1开始,而不是从零开始。我花了一分钟。后续问题,以便我理解。setValues方法如何跟踪for或if循环外部的行?这是怎么回事??感谢您给我指出了正确的方法,特别是在if语句中重新设置变量。电子表格中的行和列从一开始。getValues()创建的数组中的行和列从零开始。因此,行=1和列=1的单元格中的数据与dataA[0][0]中的数据相同。执行setValues()操作时,请确保dataR的大小相同。数组必须是二维的。嗨,库珀,谢谢你的回复和代码更新。对于任何看到这一点的人,只要提醒您更新数组列值,因为您从1开始,而不是从零开始。我花了一分钟。后续问题,以便我理解。setValues方法如何跟踪for或if循环外部的行?这是怎么回事??感谢您给我指出了正确的方法,特别是在if语句中重新设置变量。电子表格中的行和列从一开始。getValues()创建的数组中的行和列从零开始。因此,行=1和列=1的单元格中的数据与dataA[0][0]中的数据相同。执行setValues()操作时,请确保dataR的大小相同。数组必须是二维的。