【问题标题】:Google Sheet Script runs 2 timesGoogle Sheet 脚本运行 2 次
【发布时间】:2020-10-15 23:19:16
【问题描述】:

我的日历中经常出现重复条目​​的问题。

根据我目前的情况:

  1. 数据被输入到网络表单中。

  2. 然后将这些输入到我的 SQL 数据库中。

  3. 然后通过脚本发送到 Google 电子表格。到目前为止一切正常。

  4. 新文件夹中的另一个 Google 表格接收收到的数据。

  5. 使用更改触发器,现在通过脚本将数据发送到日历。 然而,问题是这种情况经常会无缘无故地发生两次。

在我选择带有更多表格的解决方案之前,如第 4 点所述,甚至有几个条目。

Google 表格中表单条目的代码来自 jamiewilson-form-to-Google-Sheets,而日历中条目的代码来自页面顶部。

function Kalendereintrag_func() {
  var kalenderID = 'xxxxxxxx@group.calendar.google.com';
  var meinKalender = CalendarApp.getCalendarById(kalenderID);
  var ss = SpreadsheetApp.openById('xxxxxxxxxxxxxxxxxxx').getSheetByName(
    'Datenimport'
  );
  var TabelleVonTag = ss.getRange('A2').getValue();
  var TabelleVonZeit = ss.getRange('B2').getValue();
  var TabelleBisTag = ss.getRange('C2').getValue();
  var TabelleBisZeit = ss.getRange('D2').getValue();
  var KalenderVon = new Date(TabelleVonTag);
  KalenderVon.setHours(TabelleVonZeit.getHours());
  KalenderVon.setMinutes(TabelleVonZeit.getMinutes());
  var KalenderBis = new Date(TabelleBisTag);
  KalenderBis.setHours(TabelleBisZeit.getHours());
  KalenderBis.setMinutes(TabelleBisZeit.getMinutes());
  var Titel = ss.getRange('E2').getValue();
  var Beschreibung = ss.getRange('F2').getValue();
  var Ort = ss.getRange('G2').getValue();
  var termin = meinKalender.createEvent(Titel, KalenderVon, KalenderBis, {
    description: Beschreibung,
    location: Ort,
  });
}

function onFormSubmit(e) {
  var targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1);
  var lock = LockService.getScriptLock();
  lock.waitLock(30000);
  var ticketNumber =
    Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
  ScriptProperties.setProperty('lastTicketNumber', ticketNumber);
  lock.releaseLock();
  targetCell.setValue(ticketNumber);
}

我有一个 Web 表单。我将此表单中的用户输入与脚本一起提供给名为“Dateneingang”的 Google 表格。运行良好。在这张名为“Auswertung”的 Google 表格的新表格中,我得到了这张表格的最后一个条目。它运行良好,我没有重复条目。但是在过去,当我尝试从这里发送数据到我的 Google 日历时,我无法触发它。因此,我采用我的解决方案方法将这些数据放在每个“Importrange”的新表中。

在那里我通过改变来触发。这是我的问题。它发送数据2次。但不是每次,而是经常。

我想好的,几秒钟后我删除了条目,但是有一个新的更改激活了触发器。然后我有一个关于解决方案的工作。

但是为什么有时运行正确而有时却没有。

【问题讨论】:

  • 谢谢,也许我找到了解决办法:我更改了 lockservice 代码。
  • Alex,顺便说一句,如果您找到了解决方案,您可以发布作为自我回答

标签: google-apps-script google-sheets google-calendar-api


【解决方案1】:
var lock = LockService.getScriptLock();
        lock.waitLock(30000);
        var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
        ScriptProperties.setProperty('lastTicketNumber', ticketNumber);
        lock.releaseLock();
        targetCell.setValue(ticketNumber);
        }

 function myFunction() {
  var lock = LockService.getScriptLock();
  try {
    lock.waitLock(5000); // wait 5 seconds try to get lock
  } catch (e) {
    Logger.log('Could not obtain lock after 5 seconds.');
  }
  Utilities.sleep(10000);
  lock.releaseLock();}

在这里找到:https://stackoverflow.com/a/63182230/10028103

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多