我到处寻找并看到了这个板上的相关问题,但我真的被卡住了。
我需要捕获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");
}
}
答案 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都会在每次循环中递增。