首页 > 解决方案 > 通过使用队列管理传入的表单数据来管理并发问题?

问题描述

注意:我已经在使用onFormSubmit,这就是问题所在。

我已经构建了一个脚本来管理共享谷歌表中的一些数据。在大多数情况下,它按预期工作,但是当一次提交多个表单时,我遇到了一个问题,即对最后一行的引用有时会重叠并导致 2 行数据引用另一张表中的重复行。我希望找到一种方法,该方法允许传入表单数据的队列。

我最近了解到存在锁定服务,但是我不完全确定它是否可以按照我想要的方式使用。我不是 100% 确定它应该如何实现,或者我需要使用几个锁服务中的哪一个。

如果谷歌脚本有某种队列系统来获取传入的表单数据,谁能指出我正确的方向?

这里的参考是一个屏幕截图,显示由于此并发问题,2 行数据如何引用另一个工作表中的同一单元格。

在此处输入图像描述

这是我的代码:

function AM2(e) {
  var form_name = "Form Responses 1";
  var open_name = "OPEN";

  var workbook = SpreadsheetApp.getActiveSpreadsheet();
  var form_ws = workbook.getSheetByName(form_name);
  var open_ws = workbook.getSheetByName(open_name);

  var frng = form_ws.getRange("A1:A").getValues();
  var frow = frng.filter(String).length;

  var gid= form_ws.getSheetId().toString();
  var gid_and_data = gid + '&range=D' + frow + '", "' + e.values[2]
  var link_var = '=HYPERLINK("https://docs.google.com/spreadsheets/d/sheet_address_redacted_for_post/edit#gid=' + gid_and_data +'")'

  open_ws.appendRow(['NEW',e.values[1],'',link_var,e.values[4]]);
  var rng = open_ws.getRange("A1:A").getValues();
  var row = rng.filter(String).length;

  var rule = SpreadsheetApp.newDataValidation().requireValueInList(['NEW', 'OPEN', 'COMPLETE', 'PENDING'], true).build();

  open_ws.getRange(row, 1).setDataValidation(rule);

}

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-macros

解决方案


推荐阅读