Google 工作表/Javascript:无法使用 indexOf() 在数组中搜索特定字符串
Google Sheets / Javascript : Unable to search for a specific string in an array using indexOf()
我正在尝试:
1) 在数组中找到包含关键字"First Name"的对象
-- 不完全-- 我可以从 driveapp 内的文件列表中做到这一点,但它似乎在 SpreadSheetApp 内不起作用。
2) 然后在我的电子表格中获取该对象的索引
--错误-- "TypeError: Cannot find function hasNext in object First Name,Last Name,[...] (line 9, file "测试从数组中获取关键字")"
3) 将该索引(实际上是列号)分配给一个变量,比如 firstNameCol,这样我就可以访问它下面一列中的所有信息。
--错误-- 我似乎错误地将值赋给了变量并且完全不知道如何去做。
我边学边学。那么,更精通 javascript / googlescript 的人能否指出我在第二项中可能犯错的地方,以及可以使用哪些方法来完成第三项?
谢谢
function testSheet()
{
var keyword = "First Name"
var ssId="1kRdKGDQJXxCW2q1HPclWcpsOpI1BJPvAlMjvLSX6JvY";
var ss = SpreadsheetApp.openById(ssId);
var sheet = ss.getSheetByName("Sheet1");
var values = sheet.getSheetValues(3, 2, 1, 23);
for(;values.hasNext(); values.next())
{
if(values.indexOf(keyword) > -1 )
/* I would like to assign the index to a variable should the if
condition return true : var keywordIndex values.getIndex();*/
logger.log(values);
}
}
您得到一行值:
var values = sheet.getSheetValues(3, 2, 1, 23);
从第 3 行第 2 列开始,得到一行值和 23 列值。
我猜您正在尝试检查所有列标题,并找到标题为 "First Name" 的列?这就是为什么您只获得一行数据的原因?
getSheetValues
方法returns一个二维数组。您需要从主数组中获取第二个维度。
以下是我对代码所做的更改:
function testSheet() {
var keyword = "First Name"
var ssId="Your SS ID";
var ss = SpreadsheetApp.openById(ssId);
var sheet = ss.getSheetByName("Form Responses 1");
var values = sheet.getSheetValues(3, 2, 1, 23);
var howManyColumns = values[0].length;
var indexOfString = 0;
var thisValue = "";
for(var i = 0;i < howManyColumns; i++) {
Logger.log('i: ' + i);
thisValue = values[0][i];
Logger.log('thisValue: ' + thisValue);
indexOfString = thisValue.indexOf(keyword);
Logger.log('indexOfString: ' + indexOfString);
if(indexOfString > -1 ) {
/* I would like to assign the index to a variable should the if
condition return true : var keywordIndex values.getIndex();*/
var thisIndexNumber = i;
Logger.log('this index: ' + thisIndexNumber);
}
}
}
我正在尝试:
1) 在数组中找到包含关键字"First Name"的对象
-- 不完全-- 我可以从 driveapp 内的文件列表中做到这一点,但它似乎在 SpreadSheetApp 内不起作用。
2) 然后在我的电子表格中获取该对象的索引
--错误-- "TypeError: Cannot find function hasNext in object First Name,Last Name,[...] (line 9, file "测试从数组中获取关键字")"
3) 将该索引(实际上是列号)分配给一个变量,比如 firstNameCol,这样我就可以访问它下面一列中的所有信息。
--错误-- 我似乎错误地将值赋给了变量并且完全不知道如何去做。
我边学边学。那么,更精通 javascript / googlescript 的人能否指出我在第二项中可能犯错的地方,以及可以使用哪些方法来完成第三项?
谢谢
function testSheet()
{
var keyword = "First Name"
var ssId="1kRdKGDQJXxCW2q1HPclWcpsOpI1BJPvAlMjvLSX6JvY";
var ss = SpreadsheetApp.openById(ssId);
var sheet = ss.getSheetByName("Sheet1");
var values = sheet.getSheetValues(3, 2, 1, 23);
for(;values.hasNext(); values.next())
{
if(values.indexOf(keyword) > -1 )
/* I would like to assign the index to a variable should the if
condition return true : var keywordIndex values.getIndex();*/
logger.log(values);
}
}
您得到一行值:
var values = sheet.getSheetValues(3, 2, 1, 23);
从第 3 行第 2 列开始,得到一行值和 23 列值。
我猜您正在尝试检查所有列标题,并找到标题为 "First Name" 的列?这就是为什么您只获得一行数据的原因?
getSheetValues
方法returns一个二维数组。您需要从主数组中获取第二个维度。
以下是我对代码所做的更改:
function testSheet() {
var keyword = "First Name"
var ssId="Your SS ID";
var ss = SpreadsheetApp.openById(ssId);
var sheet = ss.getSheetByName("Form Responses 1");
var values = sheet.getSheetValues(3, 2, 1, 23);
var howManyColumns = values[0].length;
var indexOfString = 0;
var thisValue = "";
for(var i = 0;i < howManyColumns; i++) {
Logger.log('i: ' + i);
thisValue = values[0][i];
Logger.log('thisValue: ' + thisValue);
indexOfString = thisValue.indexOf(keyword);
Logger.log('indexOfString: ' + indexOfString);
if(indexOfString > -1 ) {
/* I would like to assign the index to a variable should the if
condition return true : var keywordIndex values.getIndex();*/
var thisIndexNumber = i;
Logger.log('this index: ' + thisIndexNumber);
}
}
}