簡體   English   中英

獲取發現值的行和列索引

[英]Get row & column indices of found value

如何獲取包含要查找的值的單元格的行索引和列索引?

這是“ Grave”和“ Data_grave”兩張紙的示例:

Grave sheet 數據表

我的代碼如下:

  • 首先,在工作表“ Grave”中獲取特定值(例如,值為-“ Win”)。
  • 在工作表“ Data_grave”中找到具有此值的行和列的編號。
  • 最后,它應該在找到的值“ Win”(從列+1)附近寫入一些數據(“哇”)。

但是,我在第17行(搜索循環之后的行)收到一條錯誤消息:

無法將4,4轉換為(class)

我該如何解決?

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

正如Adelin所說:錯誤消息表明您沒有正確使用.getRange(rowNum,collNum) 該方法需要兩個數字 ,但是您要為其提供兩個數組。

當您“找到”了您要搜索的單元格,而不是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");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM