本記事ではこのような悩みを解決します。
本記事はこんな方におすすめ
- GASプログラミングを初心者向け
- GASのコードが知りたい人向け
- 作業の自動化に興味のある人向け
GAS(google apps script)を使ってシステムを組んだ時に
「CSV形式にしたシートをメールに添付して送信したい!」
っと言う事があったので、サンプルコードとして共有します。
添付してメール送信するサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//メール送信処理 var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); var maxColumn = ss.getLastColumn(); var maxRow = ss.getLastRow(); var data = ss.getRange(1,1,maxRow,maxColumn).getValues(); if (data.length > 0) { var csv = ""; for (var row = 0; row < data.length; row++) { for (var col = 0; col < data[row].length; col++) { if (data[row][col].toString().indexOf(",") != -1) { data[row][col] = "\"" + data[row][col] + "\""; } } if (row < data.length-1) { csv += data[row].join(",") + "\r\n"; } else { csv += data[row]; } } csvFile = csv; } var blob = Utilities.newBlob("", 'text/comma-separated-values', 'ファイル名.csv'); blob.setDataFromString(csvFile, "Shift_JIS"); var options = {attachments:[blob]}; MailApp.sendEmail("送信先メールアドレス", "メールタイトル", "メール本文", options); |
上記コードをコピペすれば、指定したスプレッドシート内のシートをExcelで文字化けしないように変換してメールに添付する事が出来ます。
内容どうでも良いから動けば良し!って時にご利用ください。
関連
C#プログラミングを習得した時に参考にした本を紹介しています。
Windowsアプリケーションを作ってもっと作業を自動化したい時に参考にしてみてください。
-
プログラミング未経験の30歳がC#を独学習得する時に読んだおすすめの本5選!
本記事では、独学でプログラミングを勉強するために実際に役立った本を紹介します。 プログラミング未経験者向け 30歳からプログラミングの勉強を始めた人向け 本の内容を実践できる人向け &n ...
続きを見る
サンプルコードの解説
変数へ代入
1 2 3 4 |
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); var maxColumn = ss.getLastColumn(); var maxRow = ss.getLastRow(); var data = ss.getRange(1,1,maxRow,maxColumn).getValues(); |
まずは必要な情報を全て変数へ代入します。
- SS・・・現在のアクティブなスプレッドシート内の’シート名’と言うシートを取得する。
- maxColumn・・・使用されているColumnの最後の列を取得する。
- maxRow・・・使用されているRowの最後の行を取得する。
- date・・・取得したシートに記入されているデータを全て取得する。
CSV構成へ修正
続いてCSVの構成になるようシート内データを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (data.length > 0) { var csv = ""; for (var row = 0; row < data.length; row++) { for (var col = 0; col < data[row].length; col++) { if (data[row][col].toString().indexOf(",") != -1) { data[row][col] = "\"" + data[row][col] + "\""; } } if (row < data.length-1) { csv += data[row].join(",") + "\r\n"; } else { csv += data[row]; } } csvFile = csv; } |
date[row][col]で取得したデータの中に「,」があれば前後に「\"」を付けて1つの単語にします。
CSVにした時に変な分裂しないようする処理です。
「,」がなければそのまま処理が進み、csvと言う変数の中に格納されます。
おすすめ情報
メール送信処理
1 2 3 4 |
var blob = Utilities.newBlob("", 'text/comma-separated-values', 'ファイル名.csv'); blob.setDataFromString(csvFile, "Shift_JIS"); var options = {attachments:[blob]}; MailApp.sendEmail("送信先メールアドレス", "メールタイトル", "メール本文", options); |
blobの中に「ファイル名.csv」と言うテキストタイプのデータを入れる。
ここでつけたファイル名が実際のファイル名になります。
blobのデータと「CSV構成へ修正」で作っておいたcsvFile変数を関連付けて文字コードを「shift-jis」に設定します。
ここで「shift-jis」の設定をしておかないと実際に届いたファイルをExcelで開いた時に文字化けします。
options変数に添付ファイルとして設定
最後にMailApp.sendEmailに「送信先メールアドレス」「メールタイトル」「メール本文」「添付ファイルを格納したoptions変数」を記入して完成
まとめ
今回はGASを初めて使ったので色々と調べて完成させました。
ネットでサンプルコードを拾うと実際には動かなかったり、動いたはいいけれど文字化けしたファイルだったりと情報が錯誤していたので、2020年1月21日現在では完全に動作するコードとして修正した物をアップしています。
使用例
これ何に使うの?って人向けに私自身の使用例を教えます。
- WindowsでもMacでも使える共有のネットショップ用帳簿を作りたかった。
- ネットショップの注文情報をCSVとしてダウンロード。
- ダウンロードした物をgoogle driveに入れると自動的にスプレッドシート内の売上・仕入れ帳簿・発注書へ記入。
- 過去にあった注文(重複注文)などは記入しないよう処理を飛ばす
- 帳簿処理が全て終わったら発注書シートを添付してメールを飛ばす
これで半自動的に受発注処理が可能になります。
本来ならばOauth認証使ってショップのAPI情報から取得させて完全自動出来れば一番良かったのですが、圧倒的技術不足!
いまの所は半自動で処理ですませていますが、それでも業務効率は爆上げですのでスプレッドシートを使ってメールを送るような事があればぜひともご活用ください。
関連
C#プログラミングを習得した時に参考にした本を紹介しています。
Windowsアプリケーションを作ってもっと作業を自動化したい時に参考にしてみてください。
-
プログラミング未経験の30歳がC#を独学習得する時に読んだおすすめの本5選!
本記事では、独学でプログラミングを勉強するために実際に役立った本を紹介します。 プログラミング未経験者向け 30歳からプログラミングの勉強を始めた人向け 本の内容を実践できる人向け &n ...
続きを見る