LoginSignup
1
2

More than 3 years have passed since last update.

[Google Apps Script] エクセルをGmailの下書きに圧縮して添付する

Last updated at Posted at 2020-03-14

概要

 近く、Gsuiteを社内に導入し、gas(GoogleAppsScript)で業務改善を行ってい行く予定です。今回はその勉強として、Googleドライブにあるスプレッドシートをエクセル化して、Gmailの下書きに圧縮して添付するスクリプトを作成しました。

動作結果

  1. 事前準備として、エクセルとして使用するスプレッドシートをGoogleDriveに用意します。
    キャプチャ3.PNG

  2. スクリプトを実行すると以下のように圧縮されたものがGmailの下書きに添付されます。
    無題.png

  3. 添付されたpress.zipをダウンロードして開くと、以下のようにExcelが圧縮されています。
    キャプチャ2.PNG

ソースコード

make_draft
//圧縮対象フォルダのID
var zipfolder = "xxxxxxxxxxxxxxxxxxxx"
//spreadsheetのID
var spreadsheetId = "xxxxxxxxxxxxxxxxxxxxxxx";

function myFunction () {
  // メールの宛先
  var mailTo = "to@example.com"
  //  メールのCc
  var mailCc = "cc@example.com"

  // テキストメールの場合はここに本文テキストを設定します。
  var mailBody = 'てすとでございます'  
  var date = new Date()
  // メールタイトル
  var mailTitle = date + " ほげほげ"
  // spreadsheetをexcel化する
  makeExcel()
  // 圧縮対象フォルダをzip化する
  var zipId = zippress()

  // ファイルIDを指定して、ファイルを取得する
  var report = DriveApp.getFileById(zipId);
  // 各引数をもとにgmailの下書きを作成する。
  GmailApp.createDraft(mailTo, mailTitle, mailBody,  {attachments: [report]})
}


//圧縮ルーチン
function zippress(){
//圧縮するファイルが入ってるフォルダを指定
var folder = DriveApp.getFolderById(zipfolder);
//カレントフォルダを取得する
var curdir = folder.getId();
//zip圧縮を行う
var zipman = Utilities.zip(getBlobs(folder, ''), folder.getName()+'.zip')

var zipFile = folder.getParents().next().createFile(zipman)
  return zipFile.getId()
}

//zip化するために、指定フォルダ内のファイルを配列にBlobで入れる関数
function getBlobs(rootFolder, path) {
  var blobs = [];
  var files = rootFolder.getFiles();
  while (files.hasNext()) {
    var file = files.next().getBlob();
    file.setName(path+file.getName());
    blobs.push(file);
  }
  var folders = rootFolder.getFolders();
  while (folders.hasNext()) {
    var folder = folders.next();
    var fPath = path+folder.getName()+'/';
    blobs.push(Utilities.newBlob([]).setName(fPath)); 
    blobs = blobs.concat(getBlobs(folder, fPath));
  }
  return blobs;
}


function makeExcel() {
  var excel_file = ss2xlsx(spreadsheetId);
  if (excel_file !== undefined) {
    Logger.log("Name:" + excel_file.getName());
  }
}

//SpreadsheetをExcelファイルに変換してドライブに保存、Fileを返す
function ss2xlsx(spreadsheet_id) {
  var new_file;
  var url = "https://docs.google.com/spreadsheets/d/" + spreadsheet_id + "/export?format=xlsx";
  var options = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true
  };
  var res = UrlFetchApp.fetch(url, options);
  if (res.getResponseCode() == 200) {
    var ss = SpreadsheetApp.openById(spreadsheet_id);
    //圧縮するファイルが入ってるフォルダを指定
    var folder = DriveApp.getFolderById(zipfolder);
    new_file = folder.createFile(res.getBlob()).setName(ss.getName() + ".xlsx");
  }
  return new_file;
}

続編

ブラウザから入力を受け取り、gmailの下書きに反映するものを作成しました。

[Google Apps Script] ブラウザからの入力値をもとにGmailの下書きを作成する

1
2
0

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
1
2