前提
gasのwebアプリで会社の勤怠管理システムを作成しているのですがwebアプリのテキストフォームからの社員証id取得とgasのスクリプトによる"出勤"と現在時刻の書き込みを同時に行っており処理の順番がバラバラでスプレッドシート上で行が合ったりズレたりするのを何とかしたいです。シートへの書き込みはwebアプリからappendrow,gasからはLastRow取得からのsetvalueで行っています。appendrowが先に処理されれば合うのですが当然後になると行がずれます。
実現したいこと
そもそもwebアプリのテキストフォームからiのd取得、そして"出勤"、打刻をwebアプリ側もしくはgas側で一括してスプレッドシートにappendrowしたい
javascript
<script type="text/javascript"> function sendText(){ google.script.run .withSuccessHandler(inform()) //webアプリのテキストフォームに記入された番号リスト内容を書き込む .writeSheet(document.forms['formText'].elements['message'].value //gasで"出勤"と現在時刻を書き込むスクリプト google.script.run.syukkin(); } function inform() { alert('スプレッドシートに書き込みました'); } } </script>
gas
function doGet() { const htmlOutput = HtmlService.createTemplateFromFile('index').evaluate(); htmlOutput.setTitle("出退勤"); return htmlOutput; } function openSheet() { var id = "スプレッドシートのid"; var ss = SpreadsheetApp.openById(id).getSheetByName("データ"); let lastrow = ss.getLastRow() return ss; } function writeSheet(e) { var ss = openSheet(); let lastrow = ss.getLastRow() ss.appendRow([e]); function syukkin(){ const sheat = SpreadsheetApp.openByUrl("スプレッドシートのurl").getSheetByName("データ"); let date = new Date(); let lastrow = sheat.getLastRow() sheat.getRange(lastrow,4).setValue(date) sheat.getRange(lastrow,3).setValue("出勤")
試したこと
javascript,gas双方でsleepやthread等片方の処理を遅延させる方法を試してみたが遅延されなかったり遅延されてもgetrangeは処理開始時に取得されてしまっていたりと上手くいきませんでした。gasからappendrow([e],,["出勤"],[date])というような形が一番理想に近づいたがwebアプリから[e]の値が上手く取得できませんでした。プログラミングやシステム開発自体始めたばかりでネット検索以外頼れるものもなかったのでどうかお力を貸して頂きたいです、よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー