【问题标题】:retrieve google forms edit urls and maintain existing data structure检索谷歌表单编辑网址并维护现有数据结构
【发布时间】:2019-08-14 19:18:46
【问题描述】:

我有兴趣对代码的snippet 进行一些更改,以便您记录 URL 以编辑 Google 表单的响应。

我希望实现的是在表单提交时接收这些 URL 的可重复自动化过程。 但是,我要遵循的一个条件是将这些 URL 粘贴到电子表格的第一列,以保持以下列中现有数据的完整性。

我认为这对我来说是唯一可行的选择,因为表单仍处于开发阶段,随着时间的推移可能会收到更多变量。

我已经尝试过:

  1. 在响应的 Google 表格中手动插入一列,然后尝试设置 assignEditUrls{} 函数,但没有产生任何结果。

  2. 使用一次性迷你函数插入最左边的列,然后运行代码。也没有产生任何结果,除非它被包含在 main 函数中,然后每次提交时都会插入最左边的列。

是这样的:

function insertLeftMostColumn(){
  //insert a column before the first one
  sheet.insertColumnBefore(1);

  //rename the header for the new column
  var cell = sheet.getRange("A1"); 
  cell.setValue("columnName");
}

这是函数。

function assignEditUrls() {
  var form = FormApp.openById('1cg7bGRQjsv91sSCjYCwNJyoB3wN_MZ_9raV3tP3v1MA');
    //enter form ID here

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');

  var lastColumn = sheet.getLastColumn(); // This logs the value of the very last column of this sheet (without the values)


    //Change the sheet name as appropriate
  var data = sheet.getDataRange().getValues();
  var urlCol = 5;
  var responses = form.getResponses();
  var timestamps = [], urls = [], resultUrls = [];

  for (var i = 0; i < responses.length; i++) {
    timestamps.push(responses[i].getTimestamp().setMilliseconds(0));
    urls.push(responses[i].getEditResponseUrl());
  }
  for (var j = 1; j < data.length; j++) {

    resultUrls.push([data[j][0]?urls[timestamps.indexOf(data[j][0].setMilliseconds(0))]:'']);
  }
  sheet.getRange(2, urlCol, resultUrls.length).setValues(resultUrls);  
}

current result

expected result

【问题讨论】:

  • 欢迎。你的问题是什么?换句话说,你在哪里卡住了?
  • 嗨,@Rubén!用外行的话来说,我希望将 URL 存储在第一列中,然后是所有其他列。但是我无法通过在提交谷歌表单时继续自动记录答案的方式来实现这一点。让我知道这是否有意义?谢谢。

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


【解决方案1】:

如果我的理解是正确的,您想知道如何在第一列而不是最后一列中插入编辑 URL。

如果是这样,您需要在代码中进行一些小修改:

  1. 在工作表中插入一个空列,例如使用函数insertLeftMostColumn(),正如您在上面所期望的那样。请记住,如果您只想运行该函数一次,则需要将其与assignEditUrls()分开调用,因此您必须在函数中再定义一次sheet

  2. urlCol 是列号,应粘贴 URL。要将列更改为第一列,请将var urlCol = 5; 修改为var urlCol = 1;

  3. data[j][0]?urls[timestamps.indexOf(data[j][0] 尝试在第一列中查找时间戳。

    鉴于您插入了一个空列并且时间戳已移至第二列 - 您需要将代码更改为 data[j][1]?urls[timestamps.indexOf(data[j][1];

  4. 如果您希望每次提交表单时都插入新的 URL,您需要在您的 assignEditUrls() 函数中合并一个 Form Submit 触发器。 Here 您可以找到有关如何合并可安装触发器的信息。

【讨论】:

  • 感谢您的帖子,我会在今天结束之前尝试一下,然后将结果回复您!
  • 很高兴听到这个消息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多