OnEdit()与onEdit(e)切换及单工作表A1时间戳实现咨询
解决方案
不用替换成简单触发器onEdit(e),直接改造你现有的安装型触发器函数就行——安装型触发器同样能接收事件对象e,精准定位到被编辑的工作表,完全不影响原有功能的权限和运行逻辑。
关键修改点
- 给
installedOnEdit函数添加事件参数e,通过e.range.getSheet()获取触发编辑的工作表 - 删除原来批量更新所有工作表A1的代码,只更新当前编辑表的A1单元格
- 修复原代码里的拼写错误(
option_Pricing应为op_Pricing),避免运行报错
修改后的完整代码
function installedOnEdit(e){ cpd = SpreadsheetApp.getActiveSpreadsheet(); // 【新增】获取当前被编辑的工作表 const editedSheet = e.range.getSheet(); // 工作表显隐控制逻辑(原代码保留) var pac = cpd.getSheetByName("2: PAC "); var product_Details = cpd.getSheetByName("3: Product Details"); var op_Details = cpd.getSheetByName("4: Op Details"); var marketplace = cpd.getSheetByName("5. Marketplace Details"); var approvals = cpd.getSheetByName("6: Approvals"); var product_Pricing = cpd.getSheetByName("7a: Product Pricing"); var op_Pricing = cpd.getSheetByName("7b: O Pricing"); var eos_EOL = cpd.getSheetByName("8: EOS/EOL"); var c_Overview = cpd.getSheetByName("C Overview"); var copyofprodpricing = cpd.getSheetByName("Copy of 7a: Product Pricing"); var [cella, cellb, cellc, celld, celle, cellf, cellg, cellh, celli] = c_Overview.getRange("C6:C14").getValues().flat(); if (cella =="Yes") { pac.showSheet(); } else { pac.hideSheet(); } if (cellb == "Yes") { product_Details.showSheet(); } else { product_Details.hideSheet(); } if (cellc == "Yes") { op_Details.showSheet(); } else { op_Details.hideSheet(); } if (celld == "Yes") { marketplace.showSheet(); } else { marketplace.hideSheet(); } if (celle == "Yes") { approvals.showSheet(); } else { approvals.hideSheet(); } if (cellf == "Yes") { product_Pricing.showSheet(); } else { product_Pricing.hideSheet(); } if (cellg == "Yes") { op_Pricing.showSheet(); } else { op_Pricing.hideSheet(); } if (celli == "Yes") { eos_EOL.showSheet(); } else { eos_EOL.hideSheet(); } // 【修改】仅更新当前被编辑工作表的A1时间戳 editedSheet.getRange("A1").setValue(new Date); // 审批时间戳记录逻辑(原代码保留) var email = Session.getEffectiveUser().getEmail(); var email_check1= product_Pricing.getRange("E23"); if (email_check1.isChecked()) { product_Pricing.getRange("F23").setValue(new Date()); product_Pricing.getRange("G23").setValue(email); } else { product_Pricing.getRange("F23").clearContent(); product_Pricing.getRange("G23").clearContent(); } // 【修复原代码错误】原代码里的option_Pricing未定义,替换为op_Pricing var email_check2= op_Pricing.getRange("D17"); if (email_check2.isChecked()) { op_Pricing.getRange("E17").setValue(new Date()); op_Pricing.getRange("F17").setValue(email); } else { op_Pricing.getRange("E17").clearContent(); op_Pricing.getRange("F17").clearContent(); } // EOS/EOL行显隐逻辑(原代码保留) var eos = cpd.getSheetByName("8: EOS/EOL"); var cellx = eos.getRange("D13").getValue(); if ((cellx == "EOS") || ((cellx == ""))) { eos.hideRows(15); } else { eos.showRows(15); } // PAC详情行显隐逻辑(原代码保留) var general_info = cpd.getSheetByName("1: General Info (Required)"); var check = general_info.getRange("J9").getValue(); if (check == "Direct") { pac.hideRows(37, 8); } else { if ((check == "Partner") || (check == "")) { pac.showRows(37, 8); } } // 定价页面列显隐逻辑(原代码保留) var dirpar_check = general_info.getRange("J9").getValue(); if (dirpar_check == "Direct"){ copyofprodpricing.hideColumns(18,17); } else { copyofprodpricing.showColumns(18,17); } // 单元格背景切换逻辑(原代码保留) var toggle1 = general_info.getRange("G2") var toggle2 = product_Details.getRange("H2") var toggle3 = op_Details.getRange("H2") var toggle4 = marketplace.getRange("G2") var toggle5 = approvals.getRange("G2") var toggle6 = product_Pricing.getRange("K4") var toggle7 = op_Pricing.getRange("G5") var toggle8 = eos_EOL.getRange("G2") var toggle9 = pac.getRange("I2") for (var i = 0; i < 15; i++) { if (i % 2 == 0) { toggle1.setBackground("BLACK"); // toggle1.setFontSize(12); toggle2.setBackground("BLACK"); toggle3.setBackground("BLACK"); toggle4.setBackground("BLACK"); toggle5.setBackground("BLACK"); toggle6.setBackground("BLACK"); toggle7.setBackground("BLACK"); toggle8.setBackground("BLACK"); toggle9.setBackground("BLACK"); } else { toggle1.setBackground("WHITE"); // toggle1.setFontSize(10); toggle2.setBackground("WHITE"); toggle3.setBackground("WHITE"); toggle4.setBackground("WHITE"); toggle5.setBackground("WHITE"); toggle6.setBackground("WHITE"); toggle7.setBackground("WHITE"); toggle8.setBackground("WHITE"); toggle9.setBackground("WHITE"); } SpreadsheetApp.flush(); Utilities.sleep(200); } }
可选扩展:仅给特定工作表加时间戳
如果你只想让原代码里的指定工作表触发时间戳更新,可以在设置时间戳前加个白名单判断:
// 白名单工作表名称,和原代码里的列表一致 const allowedSheets = ["2: PAC ", "3: Product Details", "4: Op Details", "5. Marketplace Details", "6: Approvals", "7a: Product Pricing", "7b: O Pricing", "8: EOS/EOL", "C Overview"]; if (allowedSheets.includes(editedSheet.getName())) { editedSheet.getRange("A1").setValue(new Date); }
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

