【问题标题】:Google form automatically run script everytime user open form每次用户打开表单时,Google 表单都会自动运行脚本
【发布时间】:2021-07-28 17:29:33
【问题描述】:

我正在制作用于预约的表格,在此表格中,用户可以选择可用日期,并且我有一个脚本可以每天从电子表格中更新日期选择,但是当有人打开/填写时,该脚本不会自动运行形式,因此日期选择不会自动更改。我每次都需要运行脚本来更新选项

有人知道如何让谷歌脚本在用户/客户每次打开表单时自动运行/更新吗?

这是表格(所以这个日期选择来自电子表格,电子表格每天都会更新,但是当我打开表格时它不会自动更改/更新)

这是选项所在的工作表

这是我的脚本代码(代码工作正常,但不会自动更新到表单)

var ssID = "1hil07Z2wvTXH1szX9bNfPKVLDQVO36ACQFGOU6_VUI0";
var formID="1SD5BenAnNxNz-wtw0YPut6YdTf7a62zHn_z3VrTdTUU";

var wsData = SpreadsheetApp.openById(ssID).getSheetByName("DATA");
var form = FormApp.openById(formID);

function main(){

var labels = wsData.getRange(1,1,1,wsData.getLastColumn()).getValues()[0];

labels.forEach(function(label,i){
 var options =  wsData
 .getRange(2, i+1,wsData.getLastRow()-1,1)
 .getDisplayValues()
 .map(function(o){return o[0]})
 .filter(function(o){return o !== ""});
//Logger.log(options);
updateDropDownUsingTitle(label,options);

});

}



function updateDropDownUsingTitle(title,values) {
var title = "Tanggal Penjemputan";
var items = form.getItems();
var titles = items.map(function(item){
return item.getTitle();

});
var pos = titles.indexOf(title);
var item = items[pos];
var itemID = item.getId();

updateDropdown(itemID,values);
}

function updateDropdown(id,values) {

var item = form.getItemById(id);
item.asListItem().setChoiceValues(values);
}

【问题讨论】:

  • 没有通过应用程序脚本对正在运行的 Google 表单进行交互式编程访问。如果您想以交互方式访问表单,则需要创建一个 web 应用程序。 Google 表单的唯一编程访问从提交点开始。您还可以在激活表单之前通过在表单编辑器中编写的代码更新选项。

标签: google-apps-script spreadsheet google-forms


【解决方案1】:

库珀的回答是正确的。脚本只能在有人打开表单编辑器时运行,您可以使用 onOpen 事件使其发生。不是用户打开表单链接。

但这里有一个你可以得到的解决方法。这取决于您要设置的值。
如果数据是按天更新的,您可以简单地添加一个触发器来按天或小时更新日期值。 如果需要在剩余时间和日期槽之前更新数据,您可以在表单提交触发器上使用。每次用户提交回复时(电子表格中会删除一个日期。剩余日期可以更新到表单中。

function update(){
  const values = SpreadsheetApp.openById('id').getActiveSheet().getDataRange().getValues();
  const form = FormApp.getActiveForm();
  let item_id;
  form.getItems().filter(r => {
    if(r.getTitle() == 'Test1'){
        item_id = r.getId();
    }
  });
  form.getItemById(item_id).asListItem().setChoiceValues(values);
  console.log(values)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多