やりたい事
会社内でgasを使ってワークフローシステムを作りたいです。
①各申請者達はGoogleフォームでExcelを添付して申請して貰う。
(承認貰いたい内容は全てExcelに書いてある)
②承認者はそのExcelを開くことなく、スプレッドシート内でタスク管理したい。
⇒申請される度にExcelのデータがスプレッドシートに1行づつ反映される方向で検討
最終的にスプレッドシート内に申請数単位でに承認ボタンを設置し、承認メールを自動送信させるつもりですが、そこに関しては問題ないと思います。上記①と②で悩んでおります。
該当のソースコード
function rennbann() {//管理番号付与 var mySheet2 = SpreadsheetApp.getActiveSheet(); //シートを取得 var range = mySheet2.getRange(mySheet2.getLastRow(),1); if(range.isBlank() == true){ range.setValue("=ROW()-1"); } } function mMail() { //依頼メールを承認者へ送付 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var myCell = mySheet.getActiveCell(); var row = myCell.getRow(); var email = mySheet.getRange(row, 3).getValue(); var tennpu =mySheet.getRange(row, 7).getValue(); var kannri =mySheet.getRange(row, 1).getValue(); var name = mySheet.getRange(row, 4).getValue(); var bumon = mySheet.getRange(row, 5).getValue(); var kinngaku =mySheet.getRange(row, 6).getValue(); var subject = '【交通費精算依頼】管理No.' + kannri + ")"; var body = "標記の件で、以下ご承認の程宜しくお願い致します\n\n" + "依頼者:" + name + "\n部門:" + bumon + "\n金額:" + kinngaku + "\n\n以上、宜しくお願い致します\n" + tennpu; MailApp.sendEmail({to:email, subject:subject,body:body}); } function kaisi(){ rennbann(); mMail(); } -------------------------------------------------------------- function showCheckboxInfo() { //承認者がチャックボックスを押下を確認 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var myCell = mySheet.getActiveCell(); var rule = myCell.getDataValidation(); if (rule != null) { var criteria = rule.getCriteriaType(); var status = myCell.getValue() if ( criteria == 'CHECKBOX' && status == true) { var row = myCell.getRow(); var result = Browser.msgBox('チェックボックスが押されました。メールを送信しますか?', Browser.Buttons.OK_CANCEL); if(result == 'ok'){ sendMail(row); } else if (result == 'cancel'){ mySheet.getRange(row,2).uncheck(); // チェックを外す } } } } function sendMail(row) { //承認者がチェックボックスを押すとメール送信 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var myCell = mySheet.getActiveCell(); var row = myCell.getRow(); var email = mySheet.getRange(row, 8).getValue(); var tennpu =mySheet.getRange(row, 7).getValue(); var kannri =mySheet.getRange(row, 1).getValue(); var subject = '【交通費精算依頼】管理No.' + kannri + ")"; var body = "標記の件で、承認致します\n" + tennpu; MailApp.sendEmail({to:email, subject:subject,body:body}); } -------------------------------------------------------------- function addCheckboxes() { //チェックボックスを追加 targetRange().insertCheckboxes(); } function checked() { targetRange().check(); } function unchecked() { targetRange().uncheck(); } function remove() { targetRange().removeCheckboxes(); } function judge() { var result = targetRange().isChecked(); Logger.log(result); } function targetRange() { var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); var range = sheet.getRange('B2:B' + lastRow); return range; }
調べたこと
Excelを一旦スプレッドシートに変更するなど、様々な方法を調べ検討しましたが、変換までしかできず、全く糸口が掴めず困っております。不可能なのか、可能であればサンプルコードを教えて頂けないでしょうか。
初投稿につき、至らない点などありましたら申し訳ございません。
9/10 追記内容
ご指摘を踏まえ、やりたいことをもう少し詳細に記載します。
それに伴いコードも作成し、追記致しました。
・申請内容は、1つ(「交通費精算の承認」)
・承認者は1人(申請者がエクセル内にて指定)
1.あらかじめフォーマットを決めた、交通費申請用のエクセル(E)を用意する。
(例:B1セル;申請者のメールアドレス、B2:申請者部門名、B3:申請者名、B4セル:承認依頼先メールアドレス、B5セル:金額)
2.申請者は、Eに申請する内容を書き込み、Googleフォーム(F)からアップロードする。
3.回答を集計しているGoogleスプレッドシート(S)のFのコンテナバインドスクリプトは下記のような内容とする。(トリガー:フォームの送信時)
回答(アップロード)されたEに対応するGoogleドライブURLを読み取り、
DriveAppサービスを使ってEをGoogleスプレッドシートに変換し、
申請者のメールアドレス、申請者部門名、申請者名、承認依頼先メールアドレス、金額を取得し、(S)のEのリンクのある行に書き込む。
※別シートの末尾行に書き込むでも大丈夫です
・Sの1列目には管理NOとして連番1~を記載。2列目は承認用のチェックボックスを設置、残りの列は申請者のメールアドレス、申請者部門名、申請者名、承認依頼先メールアドレス、金額を記録する。
4.承認者は、Googleフォーム送信時にメールを自動受信、後にSを適当なタイミングで確認し、下記の作業を行う。
B列のチェックボックスのうち「未チェック」となっている行について、内容を確認する。
・内容が妥当であればチェック入れる。
・申請者へ承認完了の申請者のメールアドレス宛にメールが送信される。
上記のうち、3の箇所をどのようにすればいいかわからず、どうかお力を頂けないでしょうか。
回答1件
あなたの回答
tips
プレビュー