You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')) {
    报错提示对应内容不是合法函数。
报错原因
  1. whenTextDoesNotContain是Google Sheets前端界面条件格式的内置规则,不属于JavaScript原生字符串方法,在Apps Script代码环境中无法直接调用,必然报函数不存在错误。
  2. !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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:00:57