为表单提交时的每条记录创建唯一 ID

问题描述 投票:0回答:2

我是 Google Apps 脚本的新手,刚刚开始了解其工作原理。一位团队成员为我正在做的一些工作编写了一个简单的脚本。本质上,当任何允许的用户组(可能有所不同)通过 Google 表单向“表单响应 1”电子表格提交输入时,该脚本就会被触发。

基本上,我有一个用户填写然后提交的表单。提交后,脚本检查活动行,代码将单元格 W2(这是一个“不编辑”单元格)的编号加 1,并用新编号替换 W2,然后检查单元格上的唯一 ID 字段是否Active Row 为空,然后将其替换为字母数字的串联 ID。即,它添加一组字母前缀,并从同一表单上的单元格 W2 获取数字输入以创建新的唯一 ID。

该脚本一直运行良好,直到该团队成员离开,我从 Google 表格中删除了她的访问权限,而对脚本没有任何更改。我一直在努力弄清楚之后发生了什么,因为自从访问被删除以来,当我没有对我的代码进行任何更改时。我搜索了很多不同的地方,似乎找不到问题所在。

如果我将其发布在新的谷歌工作表上,它工作正常..但不是在这张已经有大约 900 个关键条目的工作表上。

欢迎任何指导。脚本如下。帮助!

  //Logger.log(SpreadsheetApp.getActiveSpreadsheet().getUrl());

  //Logger.log(SpreadsheetApp.getActive().getUrl());

  

  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  NOTE: This cell should be set to the last record counter value
  var id = sheet.getRange("X2").getValue()+1;

  Logger.log("HKG0"+id);

  // Check if ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
    // Set new ID value
    sheet.getRange(2, 24).setValue(id);
    sheet.getRange(row, 1).setValue("HKG0"+id);
  }
}
excel google-apps-script google-sheets form-submit unique-key
2个回答
2
投票

如果您的代码是通过表单提交触发器运行的,那么这应该适合您。

function formsubit(e) {
  Logger.log(JSON.stringify(e));
  var sheet = e.range.getSheet();
  var id = sheet.getRange("X2").getValue() + 1;
  if (sheet.getRange(e.range.rowStart, 1).getValue() == "") {
    sheet.getRange(2, 24).setValue(id);
    sheet.getRange(e.range.rowStart, 1).setValue("HKG0" + id);
  }
}

Logger.log 将帮助您了解有关事件对象的更多信息。您可以了解有关事件对象的更多信息这里

如果您正在为每次提交寻找唯一的 ID,请尝试:

const id = new Date(e.values[0]).valueOf();
这是自 1970 年 1 月 1 日以来的毫秒数


0
投票

当使用 HTML 表单(外部源)输入数据时,您可以使用此代码为每行创建唯一 ID。此代码经过测试,在 Google Apps 脚本中 100% 运行!

// Code.gs
function getUniqueID(workSheet = 'default') {
  var prop = PropertiesService.getScriptProperties().getProperty(workSheet);
  var current = prop != null ? prop : 0;
  var value = parseInt(current) + 1;
  PropertiesService.getScriptProperties().setProperty(workSheet, value);
  Logger.log(value);
  return value;
} // end of getUniqueID

function resetUniqueID(workSheet = 'default') {
  PropertiesService.getScriptProperties().setProperty(workSheet, 0);
} // end of resetUniqueID

// Usage
const uniqueID = getUniqueID('Data');
// Here 'Data' is name of workSheet
© www.soinside.com 2019 - 2024. All rights reserved.