Различные URL-адреса форм Google (как найти связанный лист «Ответы форм») в большой электронной таблице? - PullRequest
0 голосов
/ 28 ноября 2018

В одной таблице Google есть несколько листов, некоторые из которых связаны с формами Google.Я попытался использовать этот пример , но не смог найти связанный лист.В одном случае он показывает ссылку на форму без какого-либо домена, но sheet.getFormUrl () возвращает ссылку с доменом и с идентификатором другой формы!Когда я использовал эту ссылку, она была заменена в браузере на первую ссылку (без домена).В таком случае как найти связанный лист и почему ссылки разные?!

У меня есть обработчик события onFormSubmit (на стороне формы):

/** 
 *  This function is retrieved by onFormSubmit Trigger on the Form side (not on Spreadsheet side)
 * 
 *  /11063187/kak-vklychit-razresheniya-dlya-formapp
 *  View / Show Manifest file:
 *  Add:
 *    "oauthScopes": [
 *      "https://www.googleapis.com/auth/forms",
 *      "https://www.googleapis.com/auth/spreadsheets"
 *    ]
 */
function onFormSubmit(event) {
  try {
    Logger.log(JSON.stringify(event));

    const sheet = getLinkedSheet(event);
    if(sheet) {
      Logger.log(sheet.getName());
    }

  } catch (err) {
    Logger.log(err.toString());
  }
}

function getLinkedSheet(event) {
  // Get the form to which this script is bound.
  //var form = FormApp.getActiveForm();
  //OR:
  var form = event.source; 
  var destinationId = form.getDestinationId();

  //No domain: https://docs.google.com/forms/d/e/**[ID1]**/viewform <------------- A
  var formURL = form.getPublishedUrl(); 

  var formID = form.getId();

  Logger.log("Form's URL:" +formURL);

  var ss = SpreadsheetApp.openById(destinationId);

  var sheets = ss.getSheets();  
  var match = null;
  for(var i=0; i<sheets.length; i++) {  

    //With domain: https://docs.google.com/a**/[DOMAIN]**/forms/d/**[ID2]**/viewform <----------- B
    Logger.log(JSON.stringify( sheets[i].getFormUrl() ) ); 

    if(sheets[i].getFormUrl() == formURL) {
      match = sheets[i]; //<----------------------- NO MATCHES FOUND
    }
  }

  Logger.log(JSON.stringify(match)); //null
  return match;
}

1 Ответ

0 голосов
/ 18 марта 2019

У меня та же проблема, и я отправил отчет об ошибке на https://issuetracker.google.com/issues/128732931.

Чтобы обойти проблему, я открываю форму (ы) для formUrl каждого листа, а затем проверяю и сравниваю формуID:

var form = FormApp.getActiveForm();
var formId = form.getId();
const matches = spreadSheet.getSheets().filter(function (sheet) {
  var sheetFormUrl = sheet.getFormUrl();
  if (sheetFormUrl){
    return FormApp.openByUrl(sheetFormUrl).getId() === formId;
  }
});
const sheet = matches[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...