
スプレッドシートをGASでエクセル化して自動送信して週報作る
毎週月曜日に先週の状況を取引先に報告するのがめんどくさいので作りました。
おれっち頭使わない作業系タスクめっちゃ嫌いやねん!
完成時のイメージ
スプシをエクセル化してメールに貼り付けて送信します。送信タイミング、メール内容は任意で設定できます。
前提
google driveに週報自動送信専用のフォルダ(フォルダ名はなんでもok)を作成する。
↑のフォルダ内に空のスプシを作る
なお、本記事の内容はスプシ全体をまるっとエクセル化し送信するGASなので、週報にしたいデータのみ本シートにimportrangeする前提で書いてます。というか送っちゃいけないシートをうっかりやらかさないように、週報用スプシに必要な内容だけimportrangeする運用をオススメします。
GASのコード
ファイル名は自分は「自動エクセル化&送信」にしてます。
function sendMail_Excel() {
// フォルダ、ファイル関係
var targetFileId = ["スプレッドシートのIDを記述"]; //スプレッドシートのID = 〜/d/ここ/edit
var clientname = ["エクセルの先頭の名称を記述"];
var key;
// メール関係
var mailto = "送信したいメアドをカンマ区切りで記述";
var subject = clientname + "-Weekly_Report(" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + ")";
var body = "メール本文"; // \nで改行だよ
// その他
var nowDate = Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd');
var fetchUrl;
var fetchOpt = {
"headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
"muteHttpExceptions" : true
};
var xlsxName;
var attachmentFiles = new Array();
// 添付するファイルの名前を指定
xlsxName = clientname + "-Weekly_Report.xlsx";
try
{
fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + targetFileId + "&exportFormat=xlsx";
attachmentFiles.push(UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName));
}
catch(e){
subject = "ERROR:" + subject;
body = "エラー : " + e.message;
}
// メール送信
MailApp.sendEmail(mailto, subject, body, {attachments:attachmentFiles});
}
他のスプシから任意のシートをimportrangeする
「自動文字入力」にしてます。
function autoscript() {
var from = ["インポート元のスプレッドシートIDを記述"];
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("任意のシート名").getRange(1, 1).setFormula('IMPORTRANGE("' + from + '","インポート元のシート名!セル:セル")');
}
これめっちゃ重要
スプレッドシートの仕様なんですが、importrangeの設置のみの場合、最終編集日をもとにエクセル化してしまいます。
そこでタイマーで定期的にimportrangeを任意のシートのA1セルにポストします。
タイマーの設定
autoscript
時間主導型
日付ベースのタイマー
午前3〜4時
※↑のタイマーはメールを送る前だけの更新でもいいです。お好きに。
sendMail_Excel
時間主導型
週ベースのタイマー
毎週月曜日
午前6〜7時
※送信する曜日時間はお好きに。
おわり
仙台で食べた牛タンがおいしかったです