首页 > 解决方案 > 下拉脚本滞后

问题描述

我有这个下拉脚本,它根据 G 列中的值创建一个下拉列表。G 列中可以有大约 4 个不同的值,它们应该创建 4 组不同的下拉列表。G 列上的数据来自一个过滤器,该过滤器不断更新新提交,这导致该脚本也非常一致地运行。有时脚本会有点滞后,并在刷新之前将下拉列表留空一分钟左右。你们对如何解决这个问题有什么建议吗?

function DropDowns() {
    var app = SpreadsheetApp;
    var ss = app.getActiveSpreadsheet();
    var draft = ss.getSheetByName("Time Off Action Items");
    var option = ss.getSheetByName("Options");
    var types = option.getRange(1, 1, 1, option.getLastColumn()).getValues()[0];
    var obj = types.reduce(function(o, e, i) {
        o[e.toUpperCase()] = option.getRange(2, i + 1, option.getLastRow());
        return o;
    }, {});
    var column = draft.getRange("H3:H" + draft.getLastRow());
    var Bcolumn = draft.getRange("G3:G" + draft.getLastRow());
    var rules = Bcolumn.getValues().map(function(e) {
        return e[0].toUpperCase() in obj ? [app.newDataValidation().requireValueInRange(obj[e[0].toUpperCase()]).build()] : [null]
    });

    column.setDataValidations(rules);
    Logger.log(types)
}

标签: google-apps-script

解决方案


根据你的说法

G 列中大约有 4 个不同的值,它们应该创建 4 组不同的下拉列表。

我能想到一个小的优化

根据该值,您可以使用已知值填充下拉列表,然后调用获取选项,这也将为我们提供新选项。然后,一旦我们有了选项,我们就可以更新验证选项。

这样延迟会更小。


推荐阅读