首页 > 解决方案 > 尝试根据同一行上另一个单元格的值变化擦除相应的单元格内容

问题描述

这是我第一次尝试使用 Javascript 在 GSheet 中创建等效的宏(我习惯于 Excel 中的 VBA 宏)。

我认为这个简短的 JS 脚本一旦绑定到我的 GSheet 的 onChange 事件就可以工作:

// 当 BD (56) 列中的单元格更改为值 0 时,如果 AR (44) 列中同一行上的相应单元格的值为“已批准”,则清除“已批准”字符串。

function onChange(e) {
if(e.range.columnStart === 56) { 
    if(e.value=='0' && e.range.offset(0,-12).value=='Approved'){
      e.range.offset(0,-12).clearContent();
    }
  }
}

顺便说一句,我没有收到任何错误。当我在 BD 中手动将值更改为 0 时,AR 中的 Approved contentn 会保留。我希望我知道如何调试它。

非常感谢您的帮助!

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您的 onEdit() 不起作用的原因是valueRange 对象中没有参数。当你使用Range.offset(rowOffset, columnOffset)时,它会返回一个Range 对象,来获取你需要使用Range.getValue()的单元格的值

示例工作代码(带调试日志):

function onEdit(e){
  Logger.log(e.range.columnStart);
  Logger.log(e.value);
  Logger.log(e.range.offset(0,-12).value);
  Logger.log(e.range.offset(0,-12).getColumn());
  if(e.range.columnStart === 56) { 
    if(e.value=='0' && e.range.offset(0,-12).getValue()=='Approved'){
      e.range.offset(0,-12).clearContent();
    }
  }
}

执行日志:

在此处输入图像描述

  • 请注意,当您尝试使用 获取列 AR 的值时e.range.offset(0,-12).value,该值为null
  • 将其替换为e.range.offset(0,-12).getValue()以获取单元格的值

笔记:

您可以通过添加日志来调试触发器,然后检查执行选项卡。


推荐阅读