我想使用应用程序脚本仅为特定表单响应生成编辑 URL

问题描述 投票:0回答:1

这是我的演示表和表格,可以帮助您理解我的问题。我已经在工作表上编写了一个应用程序脚本来生成 URL。实际上,我正在处理另一张纸,上面有数千条记录。为了生成响应的 URL 链接,该脚本需要很长时间,因此我们无法正常工作。 这就是为什么我希望脚本只生成特定响应的 URL,而不是全部。请各位帮忙!

表格:- https://docs.google.com/forms/d/1Qw6z_ZoCF7iFsseIKXXfhU5k0n7hT5-HGN_049ApagY/edit enter image description here enter image description here

工作表:- https://docs.google.com/spreadsheets/d/1KhTQk9i4PHEeNECY3BdbM04gAOKLGboUe8b2ZHng3po/edit#gid=836881824 enter image description here

我想要的脚本只生成特定响应的 URL,而不是全部。请各位帮忙!

google-sheets google-apps-script google-forms google-drive-shared-drive
1个回答
0
投票

下面的应用程序脚本代码将仅获取电子表格上选定行的编辑表单 URL。确保所选行是连续的,然后运行函数 selectedRows()。我也将该脚本添加到 Apps 脚本编辑器中以进行测试。使用 onOpen() 函数在自定义菜单中添加此函数可能会有所帮助。

 function selectedRows() {
  var startingRow = SpreadsheetApp.getActiveRange().getRow();
  var rowCount = SpreadsheetApp.getActiveRange().getNumRows();
  
  
  var form = FormApp.openById('1Qw6z_ZoCF7iFsseIKXXfhU5k0n7hT5-HGN_049ApagY');
    //enter form ID here

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test1');

    //Change the sheet name as appropriate
  var dataRaw = sheet.getRange(startingRow,1,rowCount).getValues()
  dataRaw = dataRaw.flat();
  var data = [];

  //Set milliseconds for each timestamp and push to new array data
  for (var y = 0; y < dataRaw.length; y++){
    data.push(dataRaw[y].setMilliseconds(0));
  }
  Logger.log(data)


  var urlCol = 4; // column number where URL's should be populated; A = 1, B = 2 etc
  var responses = form.getResponses();
  var timestamps = [], urls = [], resultUrls = [];
  
  Logger.log(responses[0].getTimestamp().setMilliseconds(0))
  
  //Loop through each time stamp in data and check it against all timestamps in response array.  If it matches push the timestamp to the urls array
  for (var i = 0; i < data.length; i++) {
   
    for (var x = 0; x < responses.length; x++){
        Logger.log("Form Stamp: " + responses[x].getTimestamp().setMilliseconds(0));
        Logger.log("Data Stamp: " + data[i]);
      if(responses[x].getTimestamp().setMilliseconds(0) == data[i]){
      urls.push([responses[x].getEditResponseUrl()]);
    
      }
    }
  }
  Logger.log(urls)
  //Set the edit URLs on the spreadsheet
  sheet.getRange(startingRow,urlCol,dataRaw.length).setValues(urls);
}
© www.soinside.com 2019 - 2024. All rights reserved.