首页 > 解决方案 > 如果长时间不使用,Google 表单脚本会在输入电子表格之前执行

问题描述

提交谷歌表单并将条目提交到电子表格后,我想进一步为条目添加一个随机的 10 位代码。我在脚本编辑器中编写了这个脚本:

function onFormSubmit(e) {

    var random = Math.floor((Math.random() * 10000000000));
    var lock = LockService.getPublicLock();
    lock.waitLock(30000);

    var sheet = SpreadsheetApp.openById('******************************').getSheetByName('testing (Responses)');
    var range = sheet.getRange(sheet.getLastRow(),3); 
    range.setValue(random);

    lock.releaseLock();

}

当我提交表单时,这非常有效。但是如果我几个小时不使用表格,然后提交表格,这个脚本会在输入到电子表格之前执行,因此这里的随机代码替换了之前输入的随机代码。最终,当输入电子表格时,这个随机代码的单元格是空的。这很奇怪,因为只有在几个小时内没有提交表单时才会发生这种情况,但如果我尽快再次提交,效果会很好。

标签: google-apps-scriptgoogle-sheetsgoogle-forms

解决方案


尝试修改你的东西是这样的:

var SHEET_ID = '******************************'

function onFormSubmit(e) {
    var random = Math.floor((Math.random() * 10000000000));
    var sheet = SpreadsheetApp.openById().getSheetByName('testing (Responses)');
    var range = sheet.getRange(sheet.getLastRow(),3);
    // Iterate throw all the rows
    for (var i = 2; i <= sheet.getLastRow(); i++) {
        random = Math.floor((Math.random() * 10000000000));
        // If the random number is not present, then set one. Otherwise skip
        if (sheet.getRange(i, 3).getValue() == "") {
            sheet.getRange(i, 3).setValue(random);
        }
    } 
}

推荐阅读