GoogleAppsScript
gas

Google Apps Scriptでスプレッドシートを別形式で保存

More than 1 year has passed since last update.


目的


  • Google Apps Scriptでスプレッドシートを出力できるのはPDF形式のみで、かつサイズ等のオプション変更ができないので実用性が低い。

  • それを解決するため、UrlFetchを使ってデータを取得する方法を次に示す。


追記)OAuth対応


実際のコード

// exportのオプション

var fileTitle = "ファイル名";
var gdocUrl = 'https://docs.google.com/spreadsheets/';
var exportOptions = {
exportFormat: "pdf",
size: "7",
fzr: "false",
portrait: "false",
gridlines: "false",
printtitle: "false",
sheetnames: "false"
};

// メールのオプション
var mailConf = {
"to" : "dummy@mail.com",
"title" : "メール添付テスト",
"msg": "テストです。"
};

// 対象となるファイルとシート(この場合は最初のシート)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var fileId = ss.getId();
var sheetId = ss.getSheets()[0].getSheetId();

// export用のURLを生成
var qs = [];
qs.push( "gid=" + sheetId );
for( paranName in exportOptions ){
qs.push( paranName + "=" + exportOptions[paranName] );
}
var fetchUrl = gdocUrl +'d/'+fileId+'/export?' + qs.join("&");

try{

// ファイルをUrlFetchで要求
var fetchOption = {
"headers" : { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }, // OAuth
"muteHttpExceptions" : true
};
var fileName = fileTitle + "." + exportOptions.exportFormat;
var fileBlob = UrlFetchApp.fetch(fetchUrl,fetchOption).getBlob().setName(fileName);

// ファイルをドライブに保存
DriveApp.createFile(fileBlob);

// メール送信を実行
MailApp.sendEmail( mailConf.to, mailConf.title, mailConf.msg, {
attachments : [fileBlob]
});

} catch(e){
Logger.log( "ファイル生成に失敗しました" );
}


参考


コードサンプル

MailApp.sendEmail( 'to@mail.com', 'mail title', 'mail body', { attachments:[{

fileName : 'test.pdf',
content : SpreadsheetApp.getActive().getAs('application/pdf').getBytes(),
mimeType :'application/pdf'
}]});