求助:Google Sheets编辑指定工作表时自动应用条件格式遇source未定义错误
解决Google Sheets工作表编辑触发条件格式问题
问题根源
之前出现「source is undefined」错误,核心原因是手动运行onEdit函数时没有传入事件对象e,或者代码中未正确校验事件对象的有效性。
正确实现脚本
以下代码仅在「Data Responses」工作表被编辑时,为「Accountability Sheet」设置条件格式:
function onEdit(e) { // 校验事件对象,禁止手动运行 if (!e) throw new Error('请通过工作表编辑触发此函数,请勿手动执行'); const editedSheet = e.source.getActiveSheet(); // 仅处理「Data Responses」工作表的编辑事件 if (editedSheet.getName() !== 'Data Responses') return; const targetSheet = e.source.getSheetByName('Accountability Sheet'); if (!targetSheet) throw new Error('未找到「Accountability Sheet」工作表'); // 清除原有条件格式规则,避免重复叠加 targetSheet.setConditionalFormatRules([]); // 创建值为'False'时标记红色的规则 const redFormatRule = SpreadsheetApp.newConditionalFormatRule() .whenTextEqualTo('False') .setBackground('#ff0000') .setRanges([targetSheet.getDataRange()]) .build(); // 创建其他值标记绿色的规则 const greenFormatRule = SpreadsheetApp.newConditionalFormatRule() .whenTextNotEqualTo('False') .setBackground('#00ff00') .setRanges([targetSheet.getDataRange()]) .build(); // 应用新规则 targetSheet.setConditionalFormatRules([redFormatRule, greenFormatRule]); }
关键说明
- 禁止手动运行:
onEdit是简单触发器,依赖Google Sheets自动传入的事件对象e,手动运行会直接报错,必须通过编辑「Data Responses」工作表触发 - 范围自定义:如果不需要为「Accountability Sheet」全表设置格式,可将
targetSheet.getDataRange()替换为指定范围,例如targetSheet.getRange('B2:E100') - 表单提交优化:若仅需在表单提交时触发,可在脚本编辑器的「编辑」>「当前项目的触发器」中添加表单提交触发器,选择此函数,触发源设为对应的表单,这样比
onEdit更精准
内容的提问来源于stack exchange,提问作者Sarah Harrison
相关产品推荐
相关产品推荐

