google-apps-script - 旨在将 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)
解决方案
问题:
如果您收到错误Cannot read property 'getId' of undefined
,这意味着您的 Form 中没有 Item 具有提供的title
. 那是因为如果在中找不到提供的titles.indexOf(title)
将返回,因此将返回。-1
title
titles
items[-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不对应,则不会报错;它只是不会更新任何东西。
推荐阅读
- mysql - 如何在没有 OUT 参数的情况下在另一个过程中获取过程结果
- android - Aws cognito presigned url 在令牌过期时收到错误
- python - 如何在使用 QuTiP 绘制 Bloch 球体时给出 aplot 标题
- tortoisesvn - TortoiseSVN 日志消息离线存储库
- c++11 - 不带C++11的最新版breakpad
- angular - 从 AWS S3 获取的 Angular 6 显示图像
- html - 我在 scss 中使用此代码进行媒体查询不起作用
- charts - 如何在 jasper 报告 3d 条形图中显示总和值?
- arrays - 无法访问二级 JSON 字符串
- apache-kafka - 如何使用 Kafka 消费者为 Flink CEP 编写 Junit 测试代码