如何把 Google 試算表連接到你的應用程式
要把 Google 試算表連接到你的應用程式,請先在 Google Cloud 專案中啟用 Google Sheets API,建立一個服務帳戶,把試算表分享給該服務帳戶的 Email 位址,並把它的金鑰儲存為伺服器端的祕密。接著,你的伺服器就能用 spreadsheets.values.get 讀取資料列,並用 spreadsheets.values.append 新增資料列。如果使用者需要連接他們自己的試算表,請改用 OAuth;如果試算表完全公開,只讀取的話,簡單的 API 金鑰就夠了。
本指南涵蓋各種方法適合的情境、需要用到的呼叫、配額與常見陷阱,以及給 AI 應用程式建構工具的提示詞。Google 的相關細節取自 Google 截至 2026 年 9 月的開發者文件。
為什麼要連接試算表
常見的原因包括:
- **保留團隊的工作流程。**員工繼續在試算表中編輯價目表或班表,應用程式則負責顯示。
- **在大家本來就會看的地方收集資料。**新註冊的會員、訂單或表單回覆都會以資料列的形式出現。
- **報表。**把應用程式的資料匯出到試算表,供習慣使用試算表的人查看。
- **作為過渡。**先從試算表開始,之後再遷移到正式的資料庫。請參考如何把試算表變成應用程式。
選擇應用程式向 Google 登入的方式
Google 的憑證指南描述了三種類型:
| 憑證 | 可以存取的內容 | 最適合 |
|---|---|---|
| API 金鑰 | 只能存取公開可用的資料,例如設定為「知道連結的任何人」的檔案 | 讀取公開試算表 |
| 服務帳戶 | 應用程式擁有的資料,或明確分享給該服務帳戶 Email 的特定檔案 | 應用程式讀寫你自己的試算表 |
| OAuth 用戶端 ID | 使用者同意後,可以存取使用者自己的檔案 | 讓每位使用者連接他們自己的試算表 |
對大多數應用程式來說,服務帳戶是正確的選擇:只需要一組由你擁有的憑證,而且只能存取你明確分享給它的試算表。
使用服務帳戶的逐步說明
- 建立或選擇一個 Google Cloud 專案,並啟用 Google Sheets API。
- 建立服務帳戶,並為它建立金鑰。金鑰是一個 JSON 檔案,請把它當成密碼一樣保管。
- 把試算表分享給服務帳戶的 Email 位址:唯讀就給檢視者,需要寫入就給編輯者。Google 的指南說明這是透過一般的分享畫面完成。
- 在伺服器上把金鑰儲存為祕密,例如
GOOGLE_SERVICE_ACCOUNT_JSON,並把試算表 ID(試算表網址中那一長串字元)儲存為SHEET_ID。 - 從伺服器呼叫 API,使用 Google 為你的程式語言提供的用戶端程式庫。
- 快取讀取結果:如果很多訪客看到的是同樣的資料,就不會超過配額。
你會用到的呼叫
以下內容取自 Google 關於讀寫數值的指南:
| 方法 | 功能 |
|---|---|
spreadsheets.values.get | 讀取一個範圍,例如 Leads!A1:E |
spreadsheets.values.batchGet | 在一次請求中讀取多個範圍 |
spreadsheets.values.update | 寫入指定的範圍 |
spreadsheets.values.append | 在表格既有資料後面新增資料列 |
範圍使用 A1 表示法。Google 提醒,沒有工作表名稱的範圍(例如 A1:B2)會套用到第一個工作表,因此請明確寫出分頁名稱,以免有人重新排列分頁時造成意外。
RAW 與 USER_ENTERED
寫入時需要指定 valueInputOption:
- RAW 會把你送出的內容原封不動地以文字儲存。
=1+2會被儲存為文字=1+2。 - USER_ENTERED 會把輸入視同在試算表中手動輸入:日期會變成日期,
=1+2會變成公式。
如果你寫入的是使用者在應用程式中輸入的文字,請使用 RAW。使用 USER_ENTERED 的話,有人可能提交一個公式,等到同事打開試算表時才執行。
配額與錯誤
截至 2026 年 9 月,Google 的 Sheets API 限制頁面列出:
| 限制 | 讀取請求 | 寫入請求 |
|---|---|---|
| 每個專案每分鐘 | 300 | 300 |
| 每位使用者在每個專案中每分鐘 | 60 | 60 |
只要你維持在每分鐘的配額之內,就沒有每日上限。超過時會回傳 429:Too many requests,Google 建議使用截斷式指數退避:每次失敗後等待更久,並加入隨機延遲,直到達到上限為止。單一請求若超過 180 秒會逾時。
實務上:不要在每次頁面瀏覽時都呼叫 API。把試算表資料快取一分鐘以上,用 batchGet 合併讀取,並在可能的地方合併寫入。
方案與取捨
| 做法 | 優點 | 缺點 |
|---|---|---|
| 以試算表作為即時資料來源 | 員工用熟悉的工具編輯;不需要另外建置後台畫面 | 有配額限制、沒有逐列權限,而且只要改個欄位名稱就容易壞掉 |
| 把試算表同步到資料庫 | 讀取快速可靠;試算表故障時應用程式仍能運作 | 需要同步工作,並且要訂好以哪一方為準的規則 |
| 以資料庫為主,再匯出到試算表 | 應用程式擁有資料;試算表只是報表 | 在試算表中的編輯不會回寫 |
| 中間使用自動化工具 | 簡單流程不需要寫程式 | 多一項訂閱;除錯較困難 |
對於有大量使用者或敏感資料的情況,資料庫才是比較好的資料來源。請參考什麼是資料庫。
給 AI 建構工具的提示詞
讀取試算表:
在選單頁面顯示我們 Google 試算表中「Menu」分頁的內容。從伺服器使用 Google Sheets API,搭配服務帳戶,其 JSON 金鑰放在祕密 GOOGLE_SERVICE_ACCOUNT_JSON 中,試算表 ID 放在 SHEET_ID。讀取範圍 Menu!A2:D(名稱、描述、價格、分類)。把結果快取 5 分鐘。如果 API 失敗,顯示最後一次快取的版本。絕不把金鑰傳送到瀏覽器。
寫入資料列:
當有人提交聯絡表單時,把它存進我們的資料庫,同時使用 spreadsheets.values.append 並以 valueInputOption RAW,在「Leads」分頁新增一列(日期、姓名、Email、留言)。如果 Google 回傳 429,就以指數退避重試;如果仍然失敗,就把潛在客戶保留在資料庫中,之後再重試。
常見錯誤
- **忘記把試算表分享給服務帳戶的 Email。**即使金鑰沒問題,API 仍會回傳權限錯誤。
- **把金鑰放在前端或程式碼儲存庫中。**JSON 金鑰可以存取所有分享給它的試算表。請參考如何妥善保管 API 金鑰。
- 對使用者輸入使用 USER_ENTERED,這會允許公式注入。
- 每次請求都呼叫 API,結果在第一波流量高峰就超過每分鐘配額。
- **依賴欄位位置。**有人插入一欄後,應用程式就會讀到錯誤的資料。請讀取標題列並依名稱對應,或鎖定標題列。
- **分享範圍比需要的還廣。**設定「知道連結的任何人」就等於公開。
- **把試算表當成多人使用的資料庫。**同時寫入與權限缺失,會造成資料遺失或外洩。
檢查清單
- 已啟用 Sheets API,並已建立服務帳戶
- 試算表已以所需的最低角色分享給服務帳戶 Email
- 金鑰與試算表 ID 已儲存為伺服器端的祕密
- 所有呼叫都從伺服器發出
- 範圍中使用了分頁名稱
- 使用者提供的文字使用 RAW
- 讀取已快取;429 以退避機制處理
- Sheets 無法使用時,應用程式能優雅降級
- 已決定以哪一方為真正的資料來源
Mythex 中的 Google 試算表
Mythex 有兩種不同的方式來使用試算表。連接器會把你的 Google 帳戶連結到 Mythex,讓代理程式在你建構時可以使用,例如讀取試算表來建立儀表板;文件說明,憑證留在 Mythex 的連線服務中,不會進入你的程式碼(請參考連接器,並核准 Google 要求的每一項權限)。若要讓已發布的應用程式自行讀寫試算表,最可靠的方式是本指南中的做法:把服務帳戶金鑰以專案祕密的形式儲存,並由伺服器呼叫 Sheets API,參考整合任何 API。如果你的資料已經超出試算表能承載的範圍,可以請代理程式把資料移到專案的資料庫中,並在其上建立儀表板。
常見問題
我的應用程式要如何讀取私人的 Google 試算表?
常見的做法是使用 Google Cloud 服務帳戶:啟用 Sheets API,建立服務帳戶及其金鑰,然後把試算表以檢視者或編輯者的身分分享給該服務帳戶的 Email 位址。你的伺服器再使用以祕密形式儲存的金鑰,呼叫 Sheets API。
我可以用 Google API 金鑰存取試算表嗎?
只能用於公開資料。Google 的憑證指南說明,API 金鑰是用於匿名存取公開可用的資料,例如任何擁有連結的人都可以看到的檔案。私人試算表需要使用服務帳戶或 OAuth。
Google Sheets API 有哪些限制?
截至 2026 年 9 月,Google 列出的限制為:每個專案每分鐘 300 次讀取與 300 次寫入請求,每位使用者在每個專案中每分鐘各 60 次,且沒有每日上限。超過限制會回傳 429 錯誤;Google 建議使用截斷式指數退避(truncated exponential backoff)。
我應該把 Google 試算表當成應用程式的資料庫嗎?
適用於小型、流量低,而且大家也會直接在試算表中編輯資料的應用程式。如果使用者很多、寫入頻繁、紀錄之間有關聯,或需要依使用者設定權限,那麼真正的資料庫會更可靠,而且你仍然可以把資料匯出到試算表。