LoginSignup
22
23

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-04

目的

  • 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'
}]});
22
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23