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

时间:2015-02-17 21:15:27

标签: javascript arrays google-apps-script google-sheets google-spreadsheet-api

我正在尝试:

1)在数组中找到包含关键字" First Name"的对象。 - 不完全 - 我可以从driveapp里面的文件列表中做到这一点,但它似乎不能在SpreadSheetApp内部工作。

2)然后在我的电子表格中获取该对象的索引 --Error--" TypeError:找不到对象First Name,Last Name,[...]中的函数hasNext(第9行,文件"从数组&#34测试获取关键字;)"

3)将该索引(实际上是列号)分配给变量,例如firstNameCol,以便我可以访问其下方列中的所有信息。
--Error--我似乎错误地将值分配给变量,并且没有丝毫的概念如何去做。

我正在学习这个。那么更流利的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);
    }
   }    

1 个答案:

答案 0 :(得分:1)

您将获得一行值:

var values = sheet.getSheetValues(3, 2, 1, 23);

从第3行开始,第2列获取一行值和23列值。

我想您正在尝试检查所有列标题,并找到标题为“#34;名字"”的列。这就是为什么你只获得一行数据的原因?

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