是否可以将问题和多项选择选项从Google表单导出到Google表格?

时间:2019-10-26 14:51:32

标签: google-apps-script google-sheets google-form

我们有一系列Google表单,其中包含多项选择题,每个问题都有4个可能的答案。

我希望能够将该问题和所有可能的答案导出到该Google表单中的所有问题和答案。

例如:

Q1:英格兰的首都是什么?

  • A:伦敦
  • B:巴黎
  • C:马德里
  • D:赫尔辛基

我尝试了各种附加组件。有允许Google表格> Google表单的加载,但是没有反向加载(我可以找到),因此我认为它将是某种脚本。

任何帮助将不胜感激。

谢谢。利亚姆。

4 个答案:

答案 0 :(得分:1)

我遇到了与您处理的几乎相同的问题,我为自己的目的用文档创建了一个小脚本,但是我认为它可以帮助您了解如何检索信息。

您需要了解以下两个API: https://developers.google.com/apps-script/reference/forms(表格)和https://developers.google.com/apps-script/reference/spreadsheet(表格)

Google Form mapping

然后,我将检查如何通过API将其发布到Google表格中。

检查是否已设置所有权限。

答案 1 :(得分:0)

似乎您需要一个Apps脚本插件或一个手动开发的Apps-Script脚本。尝试找到自由职业者或同事为您建立它。

工作表最容易使用:https://developers.google.com/apps-script/reference/spreadsheet/

答案 2 :(得分:0)

在下面的代码(我使用Apps脚本制作的代码)中,您可以找到一种方法来从Google表单中提取问题和答案,然后将值放在您选择的某个表中

// Open a form by ID.
var form = FormApp.openById('YOUR-FORM-ID');
// Open a sheet by ID.
var sheet = SpreadsheetApp.openById('YOUR-SHEET-ID').getSheets()[0];

// variables for putting the questions and answers in the right position
var question_position = 0;
var answers_position = 0;

// main function to run
function getFormValues() {
  form.getItems().forEach(callback);
}

// Iterate over all questions 
function callback(el){

  // check if the question is multiple choice
  if (el.getType() == FormApp.ItemType.MULTIPLE_CHOICE) {
    // change the type from Item to MultipleChoiceItem
    var question = el.asMultipleChoiceItem();
    var choices = question.getChoices();
    // set the title of the question in the cell
    sheet.getRange(question_position +1, 1).setValue(question.getTitle());

    var i = 0;
    // set the answers in the right cells
    for (i; i < choices.length; i++){
      sheet.getRange(answers_position + 1, 2).setValue(choices[i].getValue());
      answers_position++;
    }
    question_position += i;
    answers_position++;
  }
  question_position++;

}

文档:

如果您想知道我在哪里得到所有这些信息,可以查看以下两个链接:

答案 3 :(得分:0)

我需要一个脚本来将一些 Google 表单转换为 GIFT Moodle 格式。我修改了@alberto-vielma 脚本以获取包含 Moodle GIFT 格式的问题和选项的电子表格。

只需将电子表格中的值复制并粘贴到文本文件中即可导入到 Moodle 中。

public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConverter {

    private static final boolean jaxb2Present;

    private static final boolean jackson2Present;

    private static final boolean jackson2XmlPresent;

    private static final boolean jackson2SmilePresent;

    private static final boolean gsonPresent;

    private static final boolean jsonbPresent;

    static {
        ClassLoader classLoader = AllEncompassingFormHttpMessageConverter.class.getClassLoader();
        jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
        jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
                        ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
        jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
        jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
        gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", classLoader);
        jsonbPresent = ClassUtils.isPresent("javax.json.bind.Jsonb", classLoader);
    }


    public AllEncompassingFormHttpMessageConverter() {
        try {
            addPartConverter(new SourceHttpMessageConverter<>());
        }
        catch (Error err) {
            // Ignore when no TransformerFactory implementation is available
        }

        if (jaxb2Present && !jackson2XmlPresent) {
            addPartConverter(new Jaxb2RootElementHttpMessageConverter());
        }

        // THIS IS HERE
        if (jackson2Present) {
            addPartConverter(new MappingJackson2HttpMessageConverter());
        }
        else if (gsonPresent) {
            addPartConverter(new GsonHttpMessageConverter());
        }
        else if (jsonbPresent) {
            addPartConverter(new JsonbHttpMessageConverter());
        }

        if (jackson2XmlPresent) {
            addPartConverter(new MappingJackson2XmlHttpMessageConverter());
        }

        if (jackson2SmilePresent) {
            addPartConverter(new MappingJackson2SmileHttpMessageConverter());
        }
    }

}