javascript - Google App 脚本在电子表格中查找文本并返回位置索引

标签 javascript google-apps-script find

我是谷歌应用程序脚本的新手,我的 JavaScript 也不是很强,但这似乎都不是问题,因为我的代码第一次运行时可以工作,但当我尝试再次调用它时它失败。

我只是想拥有一个可以动态查找给定范围内给定文本的函数。虽然看起来可能有一个内置的包可以做到这一点,但我不知道如何实现它。而且该文档对新手没有帮助。

选项 1:实现以下内容:https://developers.google.com/apps-script/reference/spreadsheet/text-finder#findAll()

由于未能成功找到如何做到这一点,我转而创建以下简单的两个函数,即选项 2:

function findIndexRow(range,fText){
  for(var i = 0; i<range.length;i++){
    for(var j = 0; j<range.length;j++){
      if(range[i][j] == fText){
        var fTextRow = i+1;
        var fTextCol = j+1;
      }
    }  
  }
  return fTextRow
}

function findIndexCol(range,fText){
  for(var i = 0; i<range.length;i++){
    for(var j = 0; j<range.length;j++){
      if(range[i][j] == fText){
        var fTextRow = i+1;
        var fTextCol = j+1;
      }
    }  
  }
  return fTextCol
}

它的范围是我定义的:

var sheet = SpreadsheetApp.openById('the-gsheet-id');
var CurrSheet = sheet.getSheetByName('Sheet1');
var SHTvalues = CurrSheet.getDataRange().getValues();

因此,当我在主代码中调用它一次但第二次返回 null 时,上述内容有效,请在此帮助了解为什么重新调用同一函数不起作用。

var text1Row = findIndexRow(SHTvalues,"text1");
var text1Col = findIndexCol(SHTvalues,"text1");
Logger.log(text1Row)
Logger.log(text1Col)
var text2Row = findIndexRow(SHTvalues,"text2");
var text2Col = findIndexCol(SHTvalues,"text2");
Logger.log(text2Col)
Logger.log(text2Row)

我无法理解为什么我的日志返回 text1Rowtext1Col 的正确值,但是当第二次调用时 text2Rowtext2Col 都返回 null

最佳答案

我相信您的目标如下。

  • 您想要从 Google 电子表格的工作表中搜索文本值,并想要检索找到的值的行号和列号。
  • 您希望使用 TextFinder 来实现此目的。

对于这个,这个答案怎么样?

示例脚本:

var findText = "text1";

var sheet = SpreadsheetApp.openById('the-gsheet-id');
var CurrSheet = sheet.getSheetByName('Sheet1');
var SHTvalues = CurrSheet.createTextFinder(findText).findAll();
var result = SHTvalues.map(r => ({row: r.getRow(), col: r.getColumn()}));
console.log(result)

注意:

  • 关于my logs return the correct values for text1Row and text1Col but when it is called a second time the text2Row and text2Col both return null在您的脚本中,如果有 text1 的值和text2Sheet1 、text1Row、text1Col、text2Col 和 text2Row 具有值。如果只有 text1 的值放入 Sheet1 、text1Col 和text2Col 具有值。但 text2Col 和 text2Row 没有值 ( null )。请小心这一点。

    • 但在本例中,当将`text1 的 2 个值放入单元格“A1”和“A2”时,仅返回“A2”。还请小心这一点。
  • 在此示例脚本中,请启用 V8。

引用文献:

关于javascript - Google App 脚本在电子表格中查找文本并返回位置索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61567840/

相关文章:

javascript - 如何在 AngularJS/Bootstrap 中将变量传递给数据目标 data-toggle

javascript - jQuery:自定义自动完成列表不会在输入更改时重新绘制自身

javascript - ( Node :125008) MaxListenersExceededWarning: Possible EventEmitter memory leak detected

javascript - 查找文件名然后查找匹配的字符串

linux - 打印目录中超过 54 个字的文件名

linux - 如何配置 find 命令在 Linux shell 脚本中运行?

javascript - 在 CSS 中使用 javascript

javascript - 如何在 Google Apps 脚本上请求 Reddit 的访问 token

javascript - 如何将电子表格中的所有数据捕获到谷歌表单

google-apps-script - 使用谷歌应用程序脚本在谷歌电子表格中插入一个单元格