見出し画像

GASを使ってペーパレスなFAX環境を作ろう その②

では、前回の記事でお話しした内容を考慮してシステムを作っていきます。

今回は、いくつかの実践的な仕組みを詰めてご紹介しますので、ボリュームが大きくなりそうです。システムを名乗るのに相応しくなったかな・・・?

システムの概要

① スプレッドシートで操作・管理を行う

② FAXする資料は、Googleドキュメントで作成する

③ 複数のFAXを一度の操作で送信できる仕組みにする

④ 送信したFAXは、操作完了したことがわかるようにする

⑤ アドレス管理を行い、送信間違えリスクを低減し、選択制による宛先入力の手間を無くす

こんな感じで作ったのがこちらです。

画像1

A列は、見出しのようなものになりますので、お好みで設定してください。

B列は、FAXで送る資料のURLを入力します。Googleドキュメントで作成したら、そのままブラウザのアドレスバーに表示されているURLをコピペすればOKです。

C列は、一括送信を行う際に送っていいものか判断するために使用します。複数人で使用する場合に、自分が送りたいFAXだけチェックしましょう。

D列は、送信先医療機関を選択できる仕様にしました。

E列は、D列の内容を参照してアドレスが表示されます。別のシートにリストを作っておきましょう。こちらをデータの入力規則など使ってリスト化し、E列にVlookup関数を入れておくことで、使用時ははD列のリストから選択できるようにすると簡単になりますね。

画像2

ペーパレスなFAX環境を作るGAS

では、スプレッドシートの準備と使い方が分かったところで、これを実際に動かすGASはこちらです。

function sendFax(){
 const ss = SpreadsheetApp.getActiveSpreadsheet();
 const sheet = ss.getActiveSheet();
 const lastRow = sheet.getLastRow();
 //チェックボックスの配列取得
 const checkBoxs = sheet.getRange(1,3,lastRow,1).getValues();//1行目から //送信チェックBOX
 for(let i = 2; i <= lastRow; i++){ //iは列に合わせて
   const checkBox = checkBoxs[i-1][0];
   console.log(checkBoxs[i-1][0])
   if(checkBoxs[i-1][0] == true){
     const docUrl = sheet.getRange(i,2).getValue();
     const recipient = sheet.getRange(i,5).getValue();
     const doc = DocumentApp.openByUrl(docUrl);
     const docId = doc.getId();
     const fileName = doc.getName();
     const name = 'xxxxxx@xxxx' //送信元のアドレス
     const subject = '';
     const body =  '{nocoverpage}';//本文に{nocoverpage}を入れる          
     
     //PDFを作成するURLへ変更する
     const url = "https://docs.google.com/document/d/"
     +  docId
     + "/export?&exportFormat=pdf&format=pdf";
     
     //アクセストークンを取得する
     const token = ScriptApp.getOAuthToken();
     
     //headersにアクセストークンを格納する
     const options = {
       headers: {
         'Authorization''Bearer ' +  token
       }
     };
     
     //PDFを作成する
     const pdf = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');   
     GmailApp.sendEmail(recipient, subject, body,{attachments:pdf});//添付メール送信
     
     const today = new Date();
     const UTtoday = Utilities.formatDate(today, "JST","MM月dd日HH時mm分")
     sheet.getRange(i,3).setValue(UTtoday+' 送信済'); 
   }
 }
}

チェックボックスの判定は、for文で毎回getRangeして呼び出す方法もあると思いますが、処理回数が多くなると激しく時間がかかりますので、縦に配列を取得して配列の中で判定する方法にしました。少し難しく見えるかもしれませんね。

その他、送信操作をした際に日時を取得して、チェックボックスを送信済みの上書きができるようにしてます。eFax送信エラーがあった場合に、ある程度原因追及がし易くなると思います。

画像3

このように、チェックボックスが上書きされます。

また、FAX送信後は取り返しがつきませんから、構築中はGmailAppはcreateDraftにして下書きが作成されるまでにしておくといいでしょう。

あとは、ボタンを作成してスクリプトを設定しましょう!これで、ボタンを押下するだけで一連の動作が発火します。

おわりに

いかがでしょうか?

あらゆるGoogleのサービスをつなげ合わせることで、より一層プログラムの良さが際立ちますね。自動化が進めば、空いた時間を有効に使うことができます。ぜひ活用してくださいね!

Googleの提供するGASは無料で使用できます。ツールをメーカーから購入するだけでなく、世の中にある低価(無料)のツールを組み合わせるなどして薬局業務の革新をすることをファムテック(PharmTech)と呼びます。

皆さんも、是非ファムテックを学び、薬局業務を楽しく革新していきましょう(^^)/

この記事が気に入ったらサポートをしてみませんか?