【问题标题】:Can I have google form multiple choice options linked to google sheet?我可以将谷歌表单多项选择选项链接到谷歌表格吗?
【发布时间】:2019-10-27 21:46:17
【问题描述】:

我正在设置无声拍卖。由于该活动是慈善活动,我不愿意为任何软件付费,所以我正在尝试构建适合谷歌的东西。

在 google 表格中的“Lots”表格中,我有一个 A1:F11 范围内的表格,包括标题行。当我收到要拍卖的拍品捐赠时,这个范围将有更多的行。

我还设置了一个谷歌表单,我想将它链接到我在地块表上输入的数据。我想遍历批次表的每一行,并将 B 列中的批次名称添加到我表单上的 MultipleChoiceItem 中。

    function myFunction() {

    var form = FormApp.openByUrl(
     'FORM LINK'
     )
    var workbook  = SpreadsheetApp.openByUrl(
     'SHEET LINK')

    var sheet = book.getSheets()[0];

    itemArray = "VALUES FROM SHEET"

    var item = form.addMultipleChoiceItem();
    item.setTitle('Auction Lots')
    .setChoices([

    item.createChoice('ItemArray'),

     ])

     }

我已经编写了上面的代码,但真的不知道如何将我的工作表数据添加到数组中。除此之外,我想将 C、D 和 E 列中的描述、保留价格和当前最高出价添加到项目列表中,但希望一旦我清除了这第一个障碍,问题就不会那么严重了!

我正在尝试的可能吗?

TIA!

【问题讨论】:

  • 表单运行后,您无法像使用 HTML 表单那样以编程方式与之交互。
  • 我建议您从 Google 表单开始。手动构建一个简单的原型;弄清楚你将拥有什么数据以及它会去哪里。显示最高出价的显示位置。然后,也只有到那时,才考虑如何从电子表格更新。
  • @Cooper 我并不是说这很容易做到,但是......如果 OP 有一个 OnFormSubmit 触发器来识别项目和出价,那么脚本就不能更新相关字段对于那个项目。那么当用户下次打开表单并选择相同的项目时,表单会反映修改后的最高出价吗?
  • @Tedinoz 是的。可以那样做。但这能保证在下次提交之前更新吗?我认为这取决于他们进来的速度。我不得不承认我不经常使用 Google 表单。
  • @Avg “但这能保证在下次提交之前更新吗?” 这是“64 美元的问题”,答案是否定的。正如库珀所说,这取决于收到投标的速度。无论如何,你问“我正在尝试的事情是否可能?”答案是肯定的。您有任何为 Google 表单编码的经验吗?一旦你掌握了窍门,这并不是那么难,但根据我自己有限的经验,可能需要一段时间才能掌握窍门。

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


【解决方案1】:

我根据您对流程的描述创建了一个示例表单 [1] 和一个电子表格 [2]。我开发了以下代码,以在用户提交表单时更新表格中的最高出价,前提是响应中的出价高于当前出价。为此,我使用了有关触发器 [3]、表单 [4] 和电子表格 [5] 服务的文档。

您需要运行一次 createOnSubmitTrigger 函数来创建触发器,该触发器将在用户发送表单响应时运行 runOnFormSubmit 函数:

function runOnFormSubmit(e) {
  //Get Form and Sheet objects
  var form = FormApp.openByUrl('Form-URL')
  var workbook  = SpreadsheetApp.openByUrl('Spreadsheet-URL')
  var sheet = workbook.getSheets()[0];

  //Get the user's responses for the multiple choice and bid price questions 
  var formResponse = e.response.getItemResponses();
  var lotsResponse = formResponse[0].getResponse();
  var bidPrice = formResponse[1].getResponse();

  //Use the selected lot name and find its row in the sheet
  var selectedLotName = lotsResponse.split(', ')[0];
  var textFinder = sheet.getRange(2, 2, sheet.getLastRow()-1, 1).createTextFinder(selectedLotName).matchCase(true).matchEntireCell(true);
  var highestBidCell = textFinder.findNext().offset(0, 3);

  //If the user's bid price is higher that the the current highest bid, update the sheets
  var highestBid = highestBidCell.getValue();
  if(bidPrice > highestBid) {
    highestBidCell.setValue(bidPrice);    


    //Get Sheets info in array and remove header
    var itemsArray = sheet.getDataRange().getValues();
    itemsArray.shift();

    //Get multiple choice question
    var lotsQuestion = formResponse[0].getItem().asMultipleChoiceItem();
    var choicesArray = [];

    //Build choices array from updated sheets info
    for(var i=0; i<itemsArray.length; i++) {
      var lotName = itemsArray[i][1];
      var description = itemsArray[i][2];
      var reservePrice = itemsArray[i][3];
      var highestBid = itemsArray[i][4];

      var choiceString = lotName + ', ' + description + ', ' + reservePrice + ', ' + highestBid;
      var choice = lotsQuestion.createChoice(choiceString);
      choicesArray.push(choice);
    }

    //Set choices array to the multiple choice question, this will only be done when the bid price is higher that the the current highest bid
    lotsQuestion.setChoices(choicesArray);
  }
}

//Creates on form submit trigger
function createOnSubmitTrigger() {
  var form = FormApp.openByUrl('Form-URL');
  ScriptApp.newTrigger('runOnFormSubmit')
  .forForm(form)
  .onFormSubmit()
  .create();
}

为确保脚本同时只运行一次,您可以使用 Lock 服务 [6]。

[1]https://docs.google.com/forms/d/e/1FAIpQLSfP4skRoqQSY543wE7UbGMLMR7_glIvWpA-hl1k-kufudN64A/viewform?usp=sf_link

[2]https://docs.google.com/spreadsheets/d/1AaGeODbtm4vybQJqdoXL_3zB7hBwIYHZgcwTvtaaXN8/

[3]https://developers.google.com/apps-script/guides/triggers/events

[4]https://developers.google.com/apps-script/reference/forms/form-app

[5]https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app

[6]https://developers.google.com/apps-script/reference/lock/lock

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多