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

2024-04-07

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

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

选项 1:实施以下措施:https://developers.google.com/apps-script/reference/spreadsheet/text-finder#findAll() 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)

我不明白为什么我的日志返回正确的值text1Row and text1Col但当第二次调用时text2Row and text2Col都返回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)

Note:

  • About 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 and text2 in Sheet1、text1Row、text1Col、text2Col 和 text2Row 具有值。如果只有值text1被放入Sheet1、text1Col 和text2Col 具有值。但 text2Col 和 text2Row 没有值(null)。请小心这一点。

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

参考:

  • 类表中的 createTextFinder() https://developers.google.com/apps-script/reference/spreadsheet/sheet#createtextfinderfindtext
  • 类文本查找器 https://developers.google.com/apps-script/reference/spreadsheet/text-finder
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App 脚本在电子表格中查找文本并返回位置索引 的相关文章

随机推荐

  • 每个多个用户的 IndexedDb

    我有一个关于 IndexedDb 最佳实践 如何管理不同用户数据的问题 场景 我有一个包含系统数据的mysql数据库 当用户登录系统时 我将他的数据从mysql同步到IndexedDb 然后Web应用程序使用直接存储在indexeddb中的
  • 如何对一个列表进行排序,以便在另一个列表中发生相同的更改?

    我有个问题 例如我有 2 个列表 1 Banana Apple Orange 2 Yellow Red Orange 我想要它 list sort 所以它将是 Apple Banana Orange但同时我希望黄红橙列表中也发生同样的变化
  • 卷曲:(3)URL中发现非法字符

    我要批量查找IP 详细信息请访问 ipinfo io http ipinfo io developers bulk lookup这是我的代码 cat ips txt xargs I curl http ipinfo io region 文件
  • 在 Kendo 网格读取操作中发送附加参数

    我有一个剑道网格 如下所示 Html Kendo Grid
  • Xamarin Android 绑定

    我正在尝试为此处提供的 android sdk 创建绑定https www nmi com sdks and apis CDNA https www nmi com sdks and apis CDNA 绑定项目构建完毕 我可以将其添加到我
  • 如何访问随机网站? - Python

    如何生成随机但有效的网站链接 无论语言如何 事实上 它生成的网站语言越多样化越好 我一直在使用其他人网页上的脚本来做到这一点 我怎样才能不依赖这些随机站点转发脚本并制作自己的脚本 我一直这样做 import webbrowser from
  • Unix 'find' + 'grep' 语法与 awk

    我使用这一行在我所在目录及其所有子目录的文件中查找短语 B206 find exec grep s B206 print 当它尝试读取某些文件并实际上将 putty 中的标题栏更改为一堆奇怪的字符时 它会崩溃 例如 当它遇到子目录中的 jp
  • 使用 python lxml 将多个
    标签合并为一个标签

    我有一个 python 脚本来清理抓取的 html 内容 它使用 BeautifulSoup4 并且工作得很好 最近我决定学习 lxml 但我发现教程 对我来说 更难遵循 例如我使用下面的代码来合并多个 br 标记为一个 即如果有多个 br
  • typescript:如何扩展现有模块定义?

    我有一个为 extsting npm 包编写的声明文件 但似乎没有声明一种方法 我尝试声明它 但出现错误 请帮帮我 现有 d ts 文件的结构 declare module mongoose class Document interface
  • 尝试配置新的 webpack + angular2 项目,我收到错误 TS2384:重载签名必须全部是环境或非环境

    我正在尝试配置一个新的 webpack angular2 项目 但出现一些错误 当我使用 npm start 时 我收到很多这样的错误 ERROR in reflect metadata Reflect ts 953 21 error TS
  • 将视频从OBS流式传输到运行在heroku上并使用node-media-server的rtmp服务器

    我一直在使用react redux 节点媒体服务器和json 服务器开发这个类似Twitch 的应用程序 它允许用户通过将其 OBS 配置到服务器 URL 来直接流式传输视频 音频 并且流密钥等于在 React 应用程序中创建的流的 ID
  • 无法在詹金斯中创建“新工作”,“确定”按钮呈灰色

    我正在尝试在詹金斯创建一份新工作 即使将 项目名称 和项目类型设置为 自由式 确定 按钮也会显示为灰色 如所附屏幕截图所示 我在用 Windows 7 32 bit OS Jenkins version 1 619 谁能告诉如何解决这个问题
  • 我从来没有遇到过写得好的业务层。有什么建议吗?

    我环顾四周 看到了一些很棒的代码片段 用于定义规则 验证 业务对象 实体 等 但我不得不承认 我从未见过完整的优秀且编写良好的业务层 我只知道自己不喜欢什么 却不知道什么是好的 谁能指出一些好的 OO 业务层 或出色的业务对象 或者让我知道
  • 为什么 C# 不允许静态方法实现接口?

    为什么C 要这样设计 据我了解 接口仅描述行为 并用于描述实现特定行为的接口的类的合同义务 如果类希望在共享方法中实现该行为 为什么不应该呢 这是我的想法的一个例子 These items will be displayed in a li
  • SQL-计算计数(列)的百分比

    我有下面的代码 它计算事件列中出现的次数 SELECT event count event as event count FROM event information group by event event event count a 3
  • 查找与分组[重复]

    这个问题在这里已经有答案了 我想知道 groupBy 和 ToLookup 扩展方法之间有什么区别 让我们有一个像这样的对象列表 public class Person public uint Id get set public strin
  • 将间隔小于 15 天的行分组并分配最小/最大日期

    如果不同协议的 protocol opening date 彼此相差 15 天内 我需要在名为预期开始日期的另一列中将它们显示为一个协议 我不知道如何复制我的表格 但我会尽力解释 假设一个协议的 start date 为 24 01 201
  • 如何使用卡尔曼滤波器预测测量之间的 GPS 位置

    我研究了OpenCV卡尔曼滤波器的实现 并做了一些基本的鼠标指针模拟并了解了基础 我似乎错过了在我的应用程序中使用它的一些关键点 并希望这里有人可以提供一个小例子 使用具有速度和位置的简单模型 KF statePre at
  • 构造函数生成默认构造函数吗?

    有没有办法通过反射来确定构造函数是否是编译器生成的默认构造函数 或者还有其他办法吗 令人惊讶的是isSynthetic方法不提供此信息 因此无法使用 并且没有Generated存在注释 public class JavaTest publi
  • Google App 脚本在电子表格中查找文本并返回位置索引

    我是谷歌应用程序脚本的新手 我的 JavaScript 也不是很强 但这似乎都不是问题 因为我的代码在第一次运行时可以工作 但当我尝试再次调用它时 它会失败 简而言之 我试图拥有一个可以动态查找给定范围内给定文本的函数 虽然看起来可能有一个