Google Apps Script中如何比较文本判断变量是否含指定字符串
Google Apps Script 文本包含判断实现方案
Google Apps Script 基于JavaScript V8运行时,原生提供完整的字符串处理内置方法,判断字符串是否包含指定文本不需要自行编写底层匹配逻辑,直接调用原生API即可。
你提供的示例代码无法得到预期匹配结果,存在两处API使用错误:
- 错误1:
getRange(i, 2).getValues()返回值是二维数组,即使只选取单个单元格,返回结构为[[单元格内容]],直接对二维数组调用字符串匹配方法无法命中结果。单个单元格取值可使用getValue()方法,批量取值时需要通过数组索引读取对应位置的内容。 - 错误2:循环逐行调用
getRange、getValues的写法性能极低,数据量稍大就会触发服务调用配额限制,正确做法是一次性读取目标范围的所有数据,在内存中完成循环判断。
可直接使用的内置匹配方法
判断字符串包含关系直接使用JavaScript原生字符串方法即可:
- 区分大小写匹配:调用字符串实例的
includes()方法,返回布尔值代表是否存在目标子串,是当前最直观的写法 - 不区分大小写匹配:先将原字符串统一转为小写/大写,再调用
includes()匹配 - 兼容旧版Rhino运行时的写法:使用
indexOf()方法,返回值不等于-1即代表存在目标子串
修正后的可运行代码
function myFunction() { var objetoLibro = SpreadsheetApp.openById("1dv4FWDjhCJrruzDZsEyPPjUBHjUI-FJ9RhG68nL07qI"); var objetoHoja = objetoLibro.getSheets()[0]; var dblUltimaFila = objetoHoja.getLastRow(); // 一次性读取B列全量数据,减少服务端API调用 var columnaBValores = objetoHoja.getRange(1, 2, dblUltimaFila, 1).getValues(); for (var i = 0; i < columnaBValores.length; i++) { // 读取当前行B列的文本内容 var valorCelda = columnaBValores[i][0].toString(); // 区分大小写判断是否包含目标文本 if (valorCelda.includes("Jornada")) { Logger.log("第" + (i + 1) + "行匹配结果:" + valorCelda); } } }
如果需要不区分大小写匹配,将判断条件替换为
valorCelda.toLowerCase().includes("jornada")即可。
内容的提问来源于stack exchange,提问作者Jorge Ivan
相关产品推荐
相关产品推荐

