概要
近く、Gsuiteを社内に導入し、gas(GoogleAppsScript)で業務改善を行ってい行く予定です。今回はその勉強として、Googleドライブにあるスプレッドシートをエクセル化して、Gmailの下書きに圧縮して添付するスクリプトを作成しました。
##動作結果
ソースコード
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の下書きに反映するものを作成しました。