Converting Google Spreadsheet To Excel With Appscript And Send It Via Email
I made a question in how to Convert Google Spreadsheet to excel with AppScript 2015 and been guided to the answer in this other post https://stackoverflow.com/a/27281729/1677912 It
Solution 1:
There's a few weird things in your code, like duplicating the sheet to generate the xls, or creating a drive file out of the xls to send via email, wrong way to set the attachment name, etc.
Anyway, the key issue when I tried this code was that the Drive Advanced Service was returning an html instead of the excel file, and looking at this html it looked like an authorization page. So I figured that we need to provide the token to the UrlFetch
to make it work.
Here's my resulting code:
function crearBackUp() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var d = new Date();
var mes = d.getMonth() + 1;
var anio = d.getFullYear();
var nombre = "backUP_BaseDatos_BN_"+mes.toString()+anio.toString();
var file = Drive.Files.get(sheet.getId());
var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];
var response = UrlFetchApp.fetch(url,
{headers:{Authorization:"Bearer "+ScriptApp.getOAuthToken()}});
var doc = response.getBlob();
doc.setName(nombre+ '.xlsx');
MailApp.sendEmail('example@gmail.com', 'Subject', 'Mensaje', {attachments:[doc]});
}
Solution 2:
It's been a long time since Henrique's answer, and exportLinks
is no longer working. For this reason I leave a Script that does what you need.
function SendSheetAsXlsxAttach() {
try {
/*Get your Spreadsheet */var ss = SpreadsheetApp.openById("[YourSpreadsheetID]");
/*Create URL to Export as xlsx */var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx";
varparams = {
method: "get",
/*add authorization to get the file */
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: true
};
/* with an http query get the blob file */var blob = UrlFetchApp.fetch(url, params).getBlob();
/* sets the file extension */
blob.setName(ss.getName() + ".xlsx");
/* Send Mail with attachments */
MailApp.sendEmail("[MailHere]", "Subject", "This mail contains .XLSX file attached", { attachments: [blob] });
} catch (f) {
Logger.log(f.toString());
}
}
Solution 3:
For the spreadsheet ID, use the following:
var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
Post a Comment for "Converting Google Spreadsheet To Excel With Appscript And Send It Via Email"