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

如何设置Google Sheets单元格仅允许修改一次,防止报名信息被删除?

解决Google Sheets报名时段单元格锁定问题

Google Sheets的数据验证没法直接实现「已填写单元格禁止修改/删除」的需求——它只在用户输入新值时触发校验,删除或覆盖现有内容的场景不会被拦截。用Google Apps Script写个简单触发器就能搞定,步骤如下:

  • 打开你的报名表格,点击顶部菜单「扩展程序」→「Apps Script」
  • 清空编辑器里的默认代码,粘贴下面的脚本:
function onEdit(e) {
  const editedRange = e.range;
  const oldValue = e.oldValue;
  
  // 检查编辑前的单元格是否已填写内容
  if (oldValue && oldValue.trim() !== "") {
    // 恢复单元格原有内容
    editedRange.setValue(oldValue);
    // 弹出提示阻止操作
    SpreadsheetApp.getUi().alert("该时段已有报名信息,无法修改或删除!");
  }
}
  • 保存脚本(给项目起个名字,比如「报名锁定脚本」),关闭编辑器回到表格

这个脚本逻辑直接:只要有人试图修改已填内容的单元格,会立刻恢复原有内容并弹出提示,阻止无效操作。

补充优化

  1. 若只需锁定特定区域(比如仅B列的时段单元格),可给脚本加范围判断:
function onEdit(e) {
  const editedRange = e.range;
  const oldValue = e.oldValue;
  
  // 仅限制B列单元格(可根据需求修改列号)
  if (editedRange.getColumn() === 2 && oldValue && oldValue.trim() !== "") {
    editedRange.setValue(oldValue);
    SpreadsheetApp.getUi().alert("该时段已有报名信息,无法修改或删除!");
  }
}
  1. 若要开放管理员修改权限,可加入用户邮箱校验:
function onEdit(e) {
  const editedRange = e.range;
  const oldValue = e.oldValue;
  const currentUser = Session.getActiveUser().getEmail();
  // 替换为管理员邮箱
  const adminEmail = "your-admin-email@example.com";
  
  if (oldValue && oldValue.trim() !== "" && currentUser !== adminEmail) {
    editedRange.setValue(oldValue);
    SpreadsheetApp.getUi().alert("该时段已有报名信息,仅管理员可修改!");
  }
}

内容的提问来源于stack exchange,提问作者NotLiamRoss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:10:43