首页 > 解决方案 > 旨在将 goog 表格数据链接到 goog 表单中,但未定义 getId

问题描述

下面是我尝试将工作表链接到表单,但是,一条线不起作用并且无法克服,感谢任何建议。谢谢你。

我的整个代码如下。

var ssID = "<id1>";

var formID = "<id2>";

var wsData = SpreadsheetApp.openById(ssID).getSheetByName("data");


var form = FormApp.openById(formID);

function main(){
  
  var labels = wsData.getRange(1,1,1,wsData.getLastColumn()).getValues();
  
  
}

-------

function updateDropdownUsingTitle(title, values) {

  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(); //this line is not defined
    
  updateDropdown(itemID, values);
}

------

function updateDropdown(id, values) {
  var item  = form.getItemById(id);
  item.asListItem().setChoiceValues(values)

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

解决方案


问题:

如果您收到错误Cannot read property 'getId' of undefined,这意味着您的 Form 中没有 Item 具有提供的title. 那是因为如果在中找不到提供的titles.indexOf(title)将返回,因此将返回。-1titletitlesitems[-1]undefined

解决方案:

确保title您在调用时提供的参数updateDropdownUsingTitle对应于表单中的项目。此外,通过使用find可以大大简化此函数的代码。例如,您可以改用它:

function updateDropdownUsingTitle(title, values) {
  var items = form.getItems();
  var item = items.find(item => item.getTitle() === title);
  if (item) updateDropdown(item.getId(), values);
}

注意item:在上面的示例中,该函数在尝试更新之前检查是否已定义。因此,如果提供title的与Item不对应,则不会报错;它只是不会更新任何东西。


推荐阅读