【问题标题】:Modify existing form Values - GetChoices() not working修改现有表单值 - GetChoices() 不起作用
【发布时间】:2015-05-20 20:05:25
【问题描述】:

为什么“.getChoices()”不适用于现有列表项?

我有以下代码通过它的 ID 获取表单中的项目,我打算更新表单项目的值。但是,当使用 .getChoices() 方法时,它会失败并出现错误'TypeError: Cannot find function getChoices in object Item.'

我正在获取的项目是所需的列表项,当创建列表项然后获取时,它可以正常工作,如here 列出的示例代码。

我的代码如下:

function getWeekNumberFormItem() {
   var form = FormApp.getActiveForm();
   var item = form.getItemById(12345);//redacted for privacy, but the ID in here is correct. 
   var title = item.getTitle();
   var itemType = item.getType();
   Logger.log('Item Type: ' + itemType);
   Logger.log('Item Title: ' + title);
   var choices = item.getChoices();
   Logger.log(choices);
}

为了证明它是一个列表项,我的日志输出是:

我是不是用错了,还是只能在 Apps 脚本创建项目时使用?相反,我将如何获得此列表项中的选项并使用新选项更新它们?我看到其他用户已经设法做到这一点,所以我相信这是可能的。

【问题讨论】:

    标签: google-apps-script google-forms


    【解决方案1】:

    Item 是一个接口类,它提供了一些适用于所有表单项的方法。 “接口对象本身很少有用;相反,您通常希望调用 Element.asParagraph() 之类的方法将对象转换回精确的类。” ref

    由于.getChoices() 是属于ListItem 类的方法,并且不会出现在Item 中,因此您需要使用Item.asListItem()Item 转换为ListItem

    ...
    var itemType = item.getType();
    
    if (itemType == FormApp.ItemType.LIST) {
    
      var choices = item.asListItem().getChoices();
      //                 ^^^^^^^^^^^^
    }
    else throw new Error( "Item is not a List." );
    

    【讨论】:

    • 这行得通,但似乎记录不充分,或者我只是在文档中遗漏了什么?
    • 使用可以像这样专门化的通用对象是面向对象javascript中的常见模式,它出现在GAS中的几个地方。上面的 'ref' 简要描述了它,您将在 DocumentApp.element 和第一个 Quickstart 示例中看到它。大多数文档都是 API 指南——更多的是关于可用的内容,而不是如何使用它来解决特定问题。如果它符合你处理问题的方式,那还不错。
    • 刚刚救了我一个不眠之夜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2021-08-02
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多