1. kihachi_takayama

    Posted

    kihachi_takayama
Changes in title
+[Google Apps Script] エクセルをGmailの下書きに圧縮して添付する
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,101 @@
+# 概要
+ 近く、Gsuiteを社内に導入し、gas(GoogleAppsScript)で業務改善を行ってい行く予定である。今回はその勉強として、Googleドライブにあるスプレッドシートをエクセル化して、Gmailの下書きに圧縮して添付するスクリプトを作成した。
+
+##動作結果
+1. 事前準備として、エクセルとして使用するスプレッドシートをGoogleDriveに用意する。
+![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533728/052b29ab-a009-b4da-d7ca-936f9defb471.png)
+
+
+2. スクリプトを実行すると以下のように圧縮されたものがGmailの下書きに添付される。
+![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533728/7d51e275-f38d-70fc-5f68-48cc90c3327a.png)
+
+3. 添付されたpress.zipをダウンロードして開くと、以下のようにExcelが圧縮されていることが分る。
+![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533728/b17ede29-729a-81c0-8e6d-78d692fc360f.png)
+
+
+# ソースコード
+
+```javascript:make_draft
+//圧縮対象フォルダのID
+var zipfolder = "xxxxxxxxxxxxxxxxxxxx"
+
+
+function myFunction () {
+ var mailTo = "to@example.com"
+ var mailCc = "cc@example.com"
+
+ var mailBody = 'てすとでございます' // テキストメールの場合はここに本文テキストを設定します。
+ var date = new Date()
+ var mailTitle = date + " ほげほげ"
+
+ makeExcel()
+ var zipId = zippress()
+
+ //ファイルIDを指定して、ファイルを取得する
+ var report = DriveApp.getFileById(zipId);
+
+ 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()
+}
+
+//指定フォルダ内のファイルを配列に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() {
+ //spreadsheetのidを入れる
+ var id = "xxxxxxxxxxxxxxxxxxxxxxx";
+ var excel_file = ss2xlsx(id);
+ 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;
+}
+```