Google Sheets/Javascript:无法使用indexOf()在数组中搜索特定字符串

Google Sheets / Javascript : Unable to search for a specific string in an array using indexOf()

本文关键字:数组 搜索 字符串 indexOf Javascript Sheets Google      更新时间:2023-12-31

我正在尝试:

1) 在包含关键字"名字"的数组中查找对象--不完全——我可以从driveapp中的文件列表中完成,但它在SpreadSheetApp中似乎不起作用。

2) 然后在我的电子表格中获取该对象的索引
--错误--"TypeError:在对象First Name,Last Name,[…]中找不到函数hasNext(第9行,文件"Test get keyword from array")"

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列值。

我猜您正在尝试检查所有的列标题,并找到标题为"名字"的列?这就是为什么你只得到一行数据?

getSheetValues方法返回一个二维数组。您需要从主数组中获取第二个维度。

以下是我对代码所做的更改:

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);
    }
  }
}