获得行和找到值的列索引

时间:2016-02-04 14:38:11

标签: google-apps-script google-sheets

如何获取包含值I' m的单元格的行索引和列索引?

这是两张纸的例子," Grave"和" Data_grave":

Grave sheet Data_grave sheet

我的代码,下面应该......

  • 首先,在表格中获取特定值" Grave" (例如,值为 - " Win")。
  • 查找行号&工作表中包含此值的列" Data_grave"。
  • 最后,它应该在找到的值附近写一些数据("哇")" Win" (来自专栏+ 1)。

但是,我在第17行(搜索循环后面的行)收到错误消息:

  

无法将4,4转换为(类)

我该如何解决?

function myFind() {
  var ss = SpreadsheetApp.getActive(), rowNum = [], collNum = [];
  var findData = ss.getSheetByName('Grave').getRange("A2").getValue();
  var searchData = ss.getSheetByName('Data_grave').getDataRange().getValues();

  for(var i=1, iLen=findData.length; i<iLen; i++) {  
    for(var j=0, jLen=searchData.length; j<jLen; j++) {
      for(var k=0, kLen=searchData[0].length; k<kLen; k++) {
        var find = findData;
        if(find == searchData[j][k]) {
          rowNum.push([j+1]);
          collNum.push([k+2]);
        }
      }
    }
  }
  ss.getSheetByName('Data_grave').getRange(rowNum,collNum).setValue("wow");
}

1 个答案:

答案 0 :(得分:1)

正如Adelin评论的那样:错误消息表明您没有正确使用.getRange(rowNum,collNum)That method expects two numbers,但您提供了两个数组。

当你发现&#34;&#34;您正在搜索的单元格,而不是push()(将rowNumcolNum视为数组),您只想使用:

var rowNum = j+1;
var colNum = k+2;

您还可以使用布尔值found作为所有循环的附加退出条件,以便在成功时停止搜索。

function myFind() {
  var ss = SpreadsheetApp.getActive(), rowNum = [], collNum = [];
  var findData = ss.getSheetByName('Grave').getRange("A2").getValue();
  var searchData = ss.getSheetByName('Data_grave').getDataRange().getValues();

  var found = false;
  for(var i=1, iLen=findData.length; i<iLen && !found; i++) {  
    for(var j=0, jLen=searchData.length; j<jLen && !found; j++) {
      for(var k=0, kLen=searchData[0].length; k<kLen && !found; k++) {
        var find = findData;
        if(find == searchData[j][k]) {
          var rowNum = j+1;
          var collNum = k+2;
          found = true;
        }
      }
    }
  }
  ss.getSheetByName('Data_grave').getRange(rowNum,collNum).setValue("wow");
}