1. kihachi_takayama

    No comment

    kihachi_takayama
Changes in body
Source | HTML | Preview
@@ -1,101 +1,110 @@
# 概要
- 近く、Gsuiteを社内に導入し、gas(GoogleAppsScript)で業務改善を行ってい行く予定である。今回はその勉強として、Googleドライブにあるスプレッドシートをエクセル化して、Gmailの下書きに圧縮して添付するスクリプトを作成した。
+ 近く、Gsuiteを社内に導入し、gas(GoogleAppsScript)で業務改善を行ってい行く予定で。今回はその勉強として、Googleドライブにあるスプレッドシートをエクセル化して、Gmailの下書きに圧縮して添付するスクリプトを作成しました。
##動作結果
-1. 事前準備として、エクセルとして使用するスプレッドシートをGoogleDriveに用意する
+1. 事前準備として、エクセルとして使用するスプレッドシートをGoogleDriveに用意します
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533728/052b29ab-a009-b4da-d7ca-936f9defb471.png)
-2. スクリプトを実行すると以下のように圧縮されたものがGmailの下書きに添付され
+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が圧縮されていることが分る
+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"
+//spreadsheetのID
+var spreadsheetId = "xxxxxxxxxxxxxxxxxxxxxxx";
function myFunction () {
+ // メールの宛先
var mailTo = "to@example.com"
+ // メールのCc
var mailCc = "cc@example.com"
- var mailBody = 'てすとでございます' // テキストメールの場合はここに本文テキストを設定します。
+ // テキストメールの場合はここに本文テキストを設定します。
+ var mailBody = 'てすとでございます'
var date = new Date()
+ // メールタイトル
var mailTitle = date + " ほげほげ"
-
+ // spreadsheetをexcel化する
makeExcel()
+ // 圧縮対象フォルダをzip化する
var zipId = zippress()
- //ファイルIDを指定して、ファイルを取得する
+ // ファイル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()
}
-//指定フォルダ内のファイルを配列にBlobで入れる関数
+//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() {
- //spreadsheetのidを入れる
- var id = "xxxxxxxxxxxxxxxxxxxxxxx";
- var excel_file = ss2xlsx(id);
+ 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の下書きを作成する](https://qiita.com/kihachi_takayama/private/e151c47b0ae4787d11db)