谷歌脚本查看文本是不是包含值

Posted

技术标签:

【中文标题】谷歌脚本查看文本是不是包含值【英文标题】:Google Script to see if text contains a value谷歌脚本查看文本是否包含值 【发布时间】:2013-12-29 22:18:45 【问题描述】:

我有一个谷歌表单,当用户提交它时,它会触发我的函数运行,该函数正在创建他们作为谷歌文档提交的内容的摘要。我知道它可以自动发送电子邮件,但我需要将其格式化为我的用户以后可以编辑的方式。

表单上有一些复选框——但 getResponse() 只填充了选中的项目,我需要它来显示所有可能的选择。然后我会以某种方式指出检查的内容。

我找不到查看文本是否包含值的方法。 就像在带有字符串的 Java 中一样,我可以做 .contains("9th").indexOf("9th") >=0 然后我会知道字符串包含第 9 个。我怎样才能用谷歌脚本做到这一点?浏览了所有文档,我觉得这一定是有史以来最简单的事情。

var grade = itemResponse.getResponse();

需要看看grade是否包含9th。

【问题讨论】:

如果您不知道,您可以使用 [markdown](StackOverflow/editing-help) 在帖子正文中格式化代码 sn-ps。这有助于使您的问题更加简洁易读。 【参考方案1】:

我必须将.toString 添加到值数组中的项目。没有它,只有当整个单元格与searchTerm 匹配时,它才会匹配。

function foo() 
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = ss.getSheetByName('spreadsheet-name');
    var r = s.getRange('A:A');
    var v = r.getValues();
    var searchTerm = 'needle';
    for(var i=v.length-1;i>=0;i--) 
        if(v[0,i].toString().indexOf(searchTerm) > -1) 
            // do something
        
    
;

【讨论】:

【参考方案2】:

我使用了 Google Apps 脚本方法indexOf(),结果错误。所以我写了小函数Myindexof(),而不是indexOf

function Myindexof(s,text)

  var lengths = s.length;
  var lengtht = text.length;
  for (var i = 0;i < lengths - lengtht + 1;i++)
  
    if (s.substring(i,lengtht + i) == text)
      return i;
  
  return -1;


var s = 'Hello!';
var text = 'llo';
if (Myindexof(s,text) > -1)
   Logger.log('yes');
else
   Logger.log('no');

【讨论】:

我认为你不需要例行公事。 .includes 将返回 true 或 false,并且可以检查 indexOf 的结果是否大于零。 var src = '你好!'; var 文本 = 'llo'; var idx = src.indexOf(text); Logger.log("indexOf(text) idx: " + idx ); // 结果:2 if (src.indexOf(text) > 0 ) Logger.log('Yes');否则 Logger.log('No'); // 结果:是 Logger.log("src.includes(text): " + src.includes(text) ); // 结果: true if (Myindexof(src,text) > -1) Logger.log('yes');否则 Logger.log('no'); // 结果:是 【参考方案3】:

2020 年更新:

感谢V8 Runtime,您现在可以使用现代 ECMAScript 语法。

你可以使用includes():

var grade = itemResponse.getResponse();
if(grade.includes("9th"))do something

【讨论】:

不包含如何检查? if(!grade.includes("9th"))@NoorHossain 感谢您的快速回复@Marios【参考方案4】:

Google Apps Script 是 javascript,您可以使用所有字符串方法...

var grade = itemResponse.getResponse();
if(grade.indexOf("9th")>-1)do something 

您可以在许多网站上找到文档,例如 this one。

【讨论】:

谢谢!我发誓我尝试过,以及其他 20 种方法,但现在它可以工作了! 很高兴它有所帮助(我相信你确实做到了,但我猜某些细节一定是错误的,这样的事情会发生:-) - 请考虑接受答案。 注意:在 ECMAScript 6 (2015) 之前,endsWith() 和 starsWith() 不是 Javascript 标准,因此 Google Apps 脚本不支持这 2 个,即使它们位于您提供的 w3schools.com 链接中,当大多数浏览器都支持它们时。要支持这两个函数,可以添加 String.prototype.startsWith = function(prefix) return this.indexOf(prefix) === 0; String.prototype.endsWith = function(suffix) return this.match(suffix+"$") == suffix; ;如rickyrosario.com/blog/…

以上是关于谷歌脚本查看文本是不是包含值的主要内容,如果未能解决你的问题,请参考以下文章

谷歌表格,脚本在一个单元格中设置多个超链接

谷歌索引页面是不是包含隐藏的 div?

谷歌此网页包含的脚本来自于身份未验证怎么取消

使用谷歌应用程序脚本以编程方式将脚注添加到谷歌文档中

谷歌地图 - 点击引脚后标记部分

谷歌表单文件上传:获取文件名而不是文件链接