Почтовые скрипты возвращают электронную таблицу со страницей входа, а не данные электронной таблицы

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

«Одна учетная запись. Все в Google. Войдите, чтобы продолжить работу с Таблицами. Введите свой адрес электронной почты. Найдите мою учетную запись.

Войти с другой учетной записью Создать учетную запись

Одна учетная запись Google для всего Google "

Я пробовал внедрить некоторые функции в свой код, но не смог решить проблему. Я полагаю, ему нужно где-нибудь проверить мои учетные данные?

Я добавил строку var options = {'muteHttpExceptions': true}, чтобы обойти ошибку 404. Это основная причина?

function sendEmail() {

  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();

  var sheetName = SpreadsheetApp.getActiveSpreadsheet().getName();

  var email = Session.getUser().getEmail();

  var email_ID1 = "[email protected]";

  var subject = "Quotes";

  var body = "This is my message";

     var options = {'muteHttpExceptions': true}
     var shID = getSheetID("mail_Data") 
     var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID+"&gid="+shID;

 var result = UrlFetchApp.fetch(url, options);  
 var contents = result.getContent();

 MailApp.sendEmail(email_ID1,subject ,body, {attachments: 
 [{fileName:sheetName+".xls", content:contents, 
 mimeType:"application//xls"}]});


};
function getSheetID(mail_Data){
var ss = SpreadsheetApp.getActive().getSheetByName(mail_Data)
var sheetID = ss.getSheetId().toString() 
return sheetID
}

Ожидается, что сценарий проверит мои учетные данные перед возвратом листа.


person Niels de Visser    schedule 07.08.2019    source источник
comment
Вам необходимо отправить заголовок авторизации. Тег скрипта приложений поиска.   -  person TheMaster    schedule 07.08.2019


Ответы (1)


Получение URL-адреса должно быть авторизовано. И вы можете сделать это, получив токен OAuth и отправив его в заголовке.

Попробуйте заменить это:

 var result = UrlFetchApp.fetch(url, options);  

с этим:

var token = ScriptApp.getOAuthToken();
var result = UrlFetchApp.fetch(url, {
  headers: {
    'Authorization': 'Bearer ' +  token
  }
});

И вам не понадобится:

 var options = {'muteHttpExceptions': true}
person ADW    schedule 07.08.2019
comment
Я буквально просто исправил это сам, как мне кажется, более неясным способом. Пришел к такому: var token = ScriptApp.getOAuthToken(); var headersOptions = { Authorization : 'Bearer ' + token }; var options = { headers : headersOptions, muteHttpExceptions : true }; var result = UrlFetchApp.fetch(url, options); - person Niels de Visser; 07.08.2019