Google 应用脚本捕捉行号
Google App Script Catch Row Number
我到处看了看,也看到了这个版块的相关问题,但我真的卡住了。
我需要捕获 Sheet 的实际行值,它基于 if 语句遍历 for 循环。
在代码的其他部分,我必须创建表单响应的副本 sheet 并将其移动到文件夹中。我正在尝试将正在创建的新文件的文件 ID 记录到已经存在的 sheet 中(并且从菜单中调用脚本)。
我可以获得数据和值并遍历它们并在日志中查看所有内容。根据我在其他类似问题等中看到的内容,我尝试了 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");
}
}
如果我没看错你的问题,你的数据在第一行有列名,数据从第二行开始。
所以我认为这将实现您想要的。
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 ActiveRow = j + 2;
从 sheet 中提取数组 (formIDValues) 后,该数组与 sheet 不再相关。必须将数组中正在处理的项目的索引调整为 spreadsheet.
中的行号
j - 数组索引 - 从零开始,这是此传播中的第二行sheet,因此 j + 2
您对 j 变量的担心是没有根据的。无论是否通过任何测试,每次通过循环都会增加 j。
我到处看了看,也看到了这个版块的相关问题,但我真的卡住了。
我需要捕获 Sheet 的实际行值,它基于 if 语句遍历 for 循环。
在代码的其他部分,我必须创建表单响应的副本 sheet 并将其移动到文件夹中。我正在尝试将正在创建的新文件的文件 ID 记录到已经存在的 sheet 中(并且从菜单中调用脚本)。
我可以获得数据和值并遍历它们并在日志中查看所有内容。根据我在其他类似问题等中看到的内容,我尝试了 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");
}
}
如果我没看错你的问题,你的数据在第一行有列名,数据从第二行开始。
所以我认为这将实现您想要的。
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 ActiveRow = j + 2;
从 sheet 中提取数组 (formIDValues) 后,该数组与 sheet 不再相关。必须将数组中正在处理的项目的索引调整为 spreadsheet.
中的行号j - 数组索引 - 从零开始,这是此传播中的第二行sheet,因此 j + 2
您对 j 变量的担心是没有根据的。无论是否通过任何测试,每次通过循环都会增加 j。