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

Google表单提交自动触发随机ID生成及号码格式化问题求助

解决方案

为啥原来的代码不行?

onEdit是Google Apps Script的简单触发器,只有手动编辑表格单元格的时候才会触发,表单自动提交的内容根本不会触发这个函数,所以得用专门处理表单提交的触发事件。

修改后的完整代码

var SHEETNAME = "Compleanno2024";
var ID_COLUMN = 13;
var ID_LENGTH = 4; // 修正原代码拼写错误:LENGHT → LENGTH

// 生成随机ID的逻辑保留
function randomID() {
  var ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFHIJLMNOPQRSTUVWXYZ';
  var rtn = '2024-';
  for (var i = 0; i < ID_LENGTH; i++) {
    rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));
  }
  return rtn;
}

// 表单提交时自动执行的函数
function onFormSubmit(e) {
  var sheet = e.source.getSheetByName(SHEETNAME);
  var row = e.range.getRow();
  var values = e.values;
  var countryCode = "39";

  // 给第7列的手机号添加国家码
  if (values[6]) { // 确保手机号不为空
    sheet.getRange(row, 7).setValue(countryCode + values[6]);
  }

  // 在第13列生成随机ID
  sheet.getRange(row, ID_COLUMN).setValue(randomID());
}

// 保留手动编辑的逻辑(可选,不需要可删除)
function onEdit(e) {
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const as = e.source.getActiveSheet();

  // 手动修改第7列时,自动添加国家码并生成ID
  if (row > 1 && col === 7 && as.getName() === SHEETNAME) {
    var currentPhone = e.range.getValue();
    if (currentPhone && !currentPhone.startsWith("39")) {
      e.range.setValue("39" + currentPhone);
    }
    as.getRange(row, ID_COLUMN).setValue(randomID());
  }
}

关键配置步骤

  1. 打开关联的Google表格,点击顶部菜单「扩展程序」→「Apps脚本」。
  2. 将上述代码替换原代码,保存项目。
  3. 设置表单提交触发器:
    • 在Apps脚本界面,点击左侧时钟形状的「触发器」图标。
    • 点击「添加触发器」,配置如下:
      • 选择要运行的函数:onFormSubmit
      • 选择部署类型:「头部部署」
      • 选择事件源:「从表单提交」
      • 选择事件类型:「当提交表单时」
    • 点击「保存」,按提示完成权限授权。

额外说明

  • 修正了原代码中ID_LENGHT的拼写错误,避免逻辑出错。
  • onFormSubmit专门处理表单提交场景,保留的onEdit可覆盖手动编辑手机号的需求,不需要的话直接删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:15:02