WORKS | 作品
手機回報表單:Google Apps Script 做的填報、審核與 LINE 一鍵開啟
用 Google Apps Script 做的手機回報表單:一頁一題、草稿自動暫存、選項從試算表載入、多層連動、姓名遮罩,主管改狀態就自動寄通知信,還能從 LINE 一鍵開啟。附兩個可試填的 Demo。
- STACK / 技術
- Google Apps Script · Google 試算表 · LINE Messaging API · LIFF · HTML/JavaScript · clasp
- LINK / 連結
- 試填 Demo:外勤維修回報 →

已在實際組織使用,對象是用手機回報的成員與負責審核的管理者。為了保密,這頁的情境、名稱與資料都換成虛構的,不對應原本的單位與欄位。
很多團隊回報資料的方式是 Google 表單,或在群組裡傳訊息再由一個人整理。人一多就開始出問題:選項要一直改、有人填錯欄位、手機上表單太長沒填完就關掉,審核結果還要一個一個私訊通知。
這套表單的做法是:填的人只用手機,管的人只用試算表,中間的驗證、整理和通知交給程式。
試試看
兩個 Demo 都是純網頁示範,資料只存在你自己的瀏覽器,不會送到任何地方:
- 外勤維修回報:一頁一題、進度條、區域 → 服務站 → 技師逐層連動、客戶姓名遮罩、最後確認清單、沒填完關掉下次會接回來。下方可以直接改「管理者設定」,看選項怎麼跟著變。
- 工時申報與主管審核:員工用格狀按鈕選工時送出;切到主管分頁改審核狀態,就會看到通知信內容、審核者與時間自動回填,員工端的累計只算核定工時。
做了什麼
- 一頁一題的手機版面:頂部進度條、可回上一題修改,最後一頁列出全部答案,點哪列就跳回哪題。
- 草稿自動暫存:每答一題就存在手機瀏覽器,中途關掉下次打開回到同一題,送出後自動清除,7 天沒送出的草稿作廢。
- 選項全部放在試算表:下拉、單選、名單都從試算表的分頁讀進來,管理者改表格就好,不用改程式。
- 多層連動:選了上一層,下一層只顯示對應的選項;上一層改選,下一層已選的答案自動清掉,不會留下對不起來的組合。
- 條件式欄位:選「有」才展開金額或說明,而且變成必填;前端標紅框提醒,後端再驗一次。
- 姓名顯示遮罩:畫面上顯示「王*明」,試算表存的是完整姓名;除錯紀錄也只寫遮罩後的名字。
- 審核與通知信:管理者在試算表把狀態改成「通過/補件/不通過」,程式自動寄信、回填審核者與時間、上底色。核定數值沒填就照申報的算。
- LINE 一鍵開啟:從 LINE 官方帳號的圖文選單點進來,系統用 LINE 的 ID Token 確認身分,自動帶入填表人姓名。
架構
| 部分 | 用什麼 |
|---|---|
| 表單頁 | Apps Script 網頁應用(HTML/JavaScript),手機優先 |
| 後端 | Apps Script:讀設定、驗證、寫入、寄信 |
| 資料與設定 | Google 試算表:一個分頁存回報紀錄,其他分頁是選項與名單 |
| 審核 | 試算表「編輯時」觸發器,改狀態就處理 |
| LINE | Messaging API 綁定身分;LIFF 頁放在靜態空間,取得身分後轉到表單 |
| 版本控制 | clasp + git,金鑰放在 Apps Script 的指令碼屬性,不進程式碼 |
幾個做的時候學到的事
- 欄位用標題找,不用位置找。程式依欄位標題查欄,管理者在試算表插一欄、換順序都不會壞。
- LINE 只用「回覆」不用「推播」。回覆使用者的訊息不算月額度,小組織用免費方案就夠。
- LIFF 不能直接跑在 Apps Script 頁面裡。Apps Script 的頁面包在 Google 的 iframe 裡,LIFF 初始化會失敗,所以另放一頁靜態頁當入口,再帶著身分轉過去。
- 網頁裡別用瀏覽器的 confirm()。在 Apps Script 的沙箱裡會直接失效,確認動作改成兩段式按鈕。
- 部署要選「新版本」。改了程式只存檔,正式網址不會更新,這是最常見的「明明改了怎麼沒變」。
適合哪些情況
志工或社團的服務回報、外勤巡檢與維修回報、業務拜訪紀錄、工時或出勤申報、活動報名與簽到。共通點是:很多人用手機填、少數人在後台看與審核、預算不想付每月的 SaaS 費用,而且資料希望留在自己的 Google 帳號裡。
想把你們現在的 Google 表單或 Excel 回報流程換成這種做法,可以參考 LINE 官方帳號串接 Google 試算表,或直接聊聊。