2016-12-02 5 views
-1

для резервного копирования. Я хотел бы использовать приведенный ниже сценарий для преобразования Google-таблицы в XLSX и отправки его на выбранный адрес электронной почты. Этот скрипт работал несколько недель назад для некоторых таблиц, которые я использую. Однако из некоторых других электронных таблиц я получаю электронное письмо с «сломанным» прикреплением. В настоящее время я не могу заставить его работать снова, и я подозреваю, что проблема совместимости с кодом.Скрипт Google-Spreadsheet: отправьте письмо с прилагаемой XLSX-версией таблицы

Может кто-нибудь, пожалуйста, помогите мне?

function getGoogleSpreadsheetAsExcel(){ 
     try { 
     var ss = SpreadsheetApp.getActive(); 
     var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx"; 
     var params = { 
      method  : "get", 
      headers  : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()}, 
      muteHttpExceptions: true 
     }; 

     var blob = UrlFetchApp.fetch(url, params).getBlob(); 
     blob.setName(ss.getName() + ".xlsx"); 
     MailApp.sendEmail("[email protected]", "Google Sheet to Excel", "The XLSX file is attached", {attachments: [blob]}); 
     } catch (f) { 
     Logger.log(f.toString()); 
     } 
    } 

Образец «сломанного» прикрепления прилагается в качестве печатного экрана. Он по-прежнему входит в состав XLSX, но это HTML-код, в котором говорится, что документ не существует. Однако ссылка генерирует скрипт. И когда это делается вручную (скопируйте/вставьте сгенерированную ссылку в браузер), она работает нормально.

Разбитые прикрепленный:

enter image description here

ответ

1

Я использовал вместо ниже сценарий. Не забудьте включить API Google Диска 2 (Ressources \ Advanced Google Services)

function myFunction(config) { 

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
var spreadsheetId = spreadsheet.getId() 
var file   = Drive.Files.get(spreadsheetId); 
var url   = file.exportLinks[MimeType.MICROSOFT_EXCEL]; 
var token   = ScriptApp.getOAuthToken(); 
var response  = UrlFetchApp.fetch(url, { 
    headers: { 
    'Authorization': 'Bearer ' + token 
    } 
}); 

var fileName = (spreadsheet.getName()) + '.xlsx'; 
var blobs = [response.getBlob().setName(fileName)]; 

var receipient = "xxx" 
var subject = "xxx" 
var emailbody = "xxx" 

MailApp.sendEmail(receipient, subject, emailbody, {attachments: blobs}); 
} 
Смежные вопросы