получение исключения: ошибка недопустимого идентификатора при использовании getFileById

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

Я пытаюсь использовать скрипт из онлайн-руководства, который помещает URL-адреса в лист ответов Google forms, чтобы я мог вернуться и отредактировать ответы после их отправки.

Сценарий исходит от этого парня https://www.youtube.com/watch?v=nqOE_FIMd_w и его инструкции здесь: https://docs.google.com/document/d/1m9V_AHZdA24pUAR1xGxQNt_y3k7J9RKoSG5v_9oFvcU/edit

вот сценарий из учебника:

 function assignEditUrls() {
  var form = FormApp.openById('Your form ke goes here');

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Your responses Google Sheet name goes here - The tab name, not the file name');

  var data = sheet.getDataRange().getValues();
  var urlCol = Column number where URLs get entered goes here; 
  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);  
}
 

Кажется, все достаточно просто, но скрипт продолжает выдавать мне ошибку:

Недопустимый идентификатор (строка 2, файл «getEditLinks»)

Похоже, проблема с ключом документа. Я уже дал разрешение скрипту, и я сосредоточил свои попытки решить эту проблему, захватив разные части этого URL-адреса для файла. (Я помню, что в прошлом Google в какой-то момент требовался весь URL-адрес)

Мой

 *https://docs.google.com/spreadsheets/d/1pKmad.....VtT3GaM/edit#gid=1905774080*
 

(где ….. больше ключа doc. Я не помещаю всю партию по соображениям безопасности)

Согласно руководству и всем другим исследованиям по этому вопросу, кажется, что эта часть является правильной частью URL-адреса для использования.

 1pKmad.....VtT3GaM
 

Но это то, что приводит к ошибке.
Я попробовал весь URL-адрес, URL-адрес только до ключевой части документа и несколько других подмножеств этого, но ничего не работает.

Кто-нибудь может увидеть, что я здесь делаю не так?

Ответ №1:

Проблема:

Основываясь на вашем описании, вы пытаетесь получить доступ к файлу электронной таблицы по его id , но вы используете FormApp .

Вместо этого вы должны использовать SpreadsheetApp вместо:

var form = SpreadsheetApp.openById('1pKmad.....VtT3GaM'); // form is now a spreadsheet object

но теперь новая проблема заключается в том, что переменная form больше не является spreadsheet объектом, и в результате вы получите другие ошибки в будущем при вызове form.getResponses() .

Решение:

Вам нужно использовать существующий скрипт и поместить id форму вместо электронной таблицы, которую можно найти по form url:

var form = FormApp.openById('Form ID here not Spreadsheet ID');

Примечание:

Форма url выглядит следующим образом:

https://docs.google.com/forms/d/formID/edit

и вы можете найти форму, прикрепленную к файлу электронной таблицы, в меню файл электронной таблицы:

введите описание изображения здесь

Комментарии:

1. Ага, это было не так сложно, как казалось. Мне пришлось использовать идентификатор из ФОРМЫ, а не из целевой таблицы. Также необходимо использовать ФОРМУ в режиме редактирования, а не идентификатор общедоступной ФОРМЫ. Мне вообще не нужно было переходить с FormApp на SpreadsheetApp, чтобы это работало

2. @Mastercore рассмотрите возможность принятия ответа, если он решил вашу проблему, нажав на кнопку галочки слева от ответа.