Скрипт работает нормально на одном листе, а не на другом

У меня есть два листа, оба на общем диске. У обоих есть один и тот же сценарий для отправки электронных писем в формате html на основе документа Google (также расположенного на общем диске): сначала я получаю код html, а затем отправляю почту.

На листе все работает нормально, но я получаю 404, если запускаю его на другом листе.

Сначала я подумал о проблеме с разрешениями, но я запустил ее из двух разных учетных записей, и у меня такое же поведение. Странно то, что этот скрипт работал абсолютно нормально...

Вот сценарий:

function docToHtml(templateId){
  var url = "https://docs.google.com/feeds/download/documents/export/Export?id="+templateId+"&exportFormat=html";
  var param = 
      {
        method      : "get",
        headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
        muteHttpExceptions:false,
      };
  var html = UrlFetchApp.fetch(url,param).getContentText();
  return html;
}

Что ж, поскольку на одном из листов он работает нормально, сценарий не должен быть виновником. Я пытался понять это, но у меня нет мыслей.


person Romain    schedule 15.07.2020    source источник
comment
Есть ли отличия между листами? Данные одинаковые?   -  person Kessy    schedule 15.07.2020
comment
@Kessy Нет, листы не одинаковы и содержат разные данные. Что я пробовал, так это создать новый лист, скопировать код и попробовать. Но опять же, я получаю этот 404 или, что еще хуже, 401. Как я уже сказал, раньше он работал без проблем. Любая мысль, где я мог бы искать?   -  person Romain    schedule 16.07.2020
comment
Как вы звоните docToHtml? Вы уверены, что templateId действительно является действительным идентификатором электронной таблицы? Вы уже пробовали использовать Chrome в режиме инкогнито со всеми отключенными расширениями?   -  person Rubén    schedule 20.07.2020
comment
@Rubén, когда кто-то отвечает на форму, данные вставляются в лист. Затем этот лист отправляет настроенное письмо в формате html этому человеку. В этом скрипте вызывается функция docToHtml. Я пробовал следующее: получить ссылку, сгенерированную этой функцией ('url' var), и вставить ее в браузер. Работает отлично. Но при выполнении скрипта безуспешно. Я попробую ваши предложения. Я прочитал вашу вторую ссылку, интересную, с таким же поведением, как и у меня.   -  person Romain    schedule 20.07.2020


Ответы (1)


Ошибка 404 означает «Не найдено», поэтому возможно, что идентификатор электронной таблицы неверен или используемые вами учетные данные OAuth не имеют разрешения на доступ к соответствующим файлам.

Если вы вызываете функцию из диалогового окна или боковой панели, возможно, в сценарий на стороне сервера передаются неправильные учетные данные.

Другая возможность заключается в том, что области скрипта не включают ни одну из тех, которые позволяют получить доступ к файлу, размещенному на Google Диске1.

ПРИМЕЧАНИЯ:

  1. Эта возможность была подтверждена ОП в комментарии к этому ответу.

If you are open to use an alternative, I suggest you to use `DriveApp` or `Drive` instead of Google Documents (DATA) API as nowadays there aren't official reference doc about
GET /feeds/download 

В любом случае, есть много вопросов, использующих похожие формы, т.е.

https://docs.google.com/feeds/download/spreadsheet/export/Export?=...
https://spreadsheet.google.com/feeds/download/spreadsheet/export/Export?=...

Связанный

person Rubén    schedule 19.07.2020
comment
Вторая ссылка, представленная в этом ответе, решила проблему, спасибо @rubén - person Romain; 20.07.2020
comment
@Romain Добро пожаловать. Кстати, добавление DriveApp.getRootFolder() сделало GET /feeds/download/...работой, потому что оно добавляет область, необходимую для доступа к файлам, размещенным на Google Диске. - person Rubén; 20.07.2020