Google Script中如何实现includes的不包含判断逻辑
问题背景
现有Google Apps Script脚本已实现逻辑:读取data工作表数据,筛选A列文本包含250p的行,拆分对应B列的换行内容,逐行写入Desired Outcome工作表。
现需新增逻辑:提取A列文本不包含250p的行对应的C列所有数据,和原有B列提取结果合并后写入目标表。
已尝试的两种判断写法均运行报错:
if (!type.toLowerCase().includes('250p')) {if (type.whenTextDoesNotContain('250p')) {
报错提示对应内容不是合法函数。
报错原因
whenTextDoesNotContain是Google Sheets前端界面条件格式的内置规则,不属于JavaScript原生字符串方法,在Apps Script代码环境中无法直接调用,必然报函数不存在错误。!type.toLowerCase().includes('250p')语法本身是合法的“不包含”判断逻辑,原有代码报错核心原因有两个:- 初始取数范围仅设置为
A2:B,完全没有读取C列数据,就算判断逻辑正确也无法获取到C列值 - 原有映射逻辑仅处理了A列包含
250p的分支,未处理不包含分支的返回值,后续执行时会因空值、undefined值触发类型错误。
- 初始取数范围仅设置为
修正后可运行代码
const sS = SpreadsheetApp.getActiveSpreadsheet() function grabData() { const sheetIn = sS.getSheetByName('data') const sheetOut = sS.getSheetByName('Desired Outcome') // 扩大取数范围至C列,覆盖需要读取的所有数据源 const range = 'A2:C' const values = sheetIn.getRange(range).getValues().filter(n => n[0]) const parsedValues = values.map((arr) => { // 解构同时获取A、B、C三列的值 const [type, bColVal, cColVal] = arr const typeStr = type.toLowerCase() // A列包含250p时,拆分B列换行内容 if (typeStr.includes('250p')) { return bColVal.split('\n') } // A列不包含250p时,拆分C列换行内容,增加空值判断避免空单元格报错 if (!typeStr.includes('250p')) { return cColVal ? cColVal.split('\n') : [] } }) .filter(n => n) .flat() // 过滤拆分产生的空字符串,避免写入多余空行 .filter(item => item.trim()) .map(item => [item.trim()]) // 仅当有可写入数据时执行写入操作,避免空值写入报错 if (parsedValues.length > 0) { sheetOut .getRange(sheetOut.getLastRow() + 1, 1, parsedValues.length, 1) .setValues(parsedValues) } }
关键修正点
- 取数范围从
A2:B调整为A2:C,确保能读取到C列数据源 - 解构赋值时新增C列变量,同时对C列空值做兼容处理,避免空单元格调用
split方法触发错误 - 补全不包含
250p的判断分支,使用原生JS合法的取反判断逻辑实现不包含匹配 - 增加空字符串过滤、空数据写入判断,提升脚本鲁棒性,避免无效报错
内容的提问来源于stack exchange,提问作者Genny
相关产品推荐
相关产品推荐

