Google 試算表實作簡易資料庫 運用 Google Sheet、App Script 與 Visualization API 打造低成本、高效率的資料管理系統

me
林彥成
2019-03-28 | 4 min.
文章目錄
  1. 1. 為什麼要用 Google 試算表當簡易資料庫?
  2. 2. Google 表單與試算表如何成為資料庫
  3. 3. Visualization API
  4. 4. Google App Script
  5. 5. FAQ:Google 試算表資料庫常見問題
    1. 5.1. Q1:使用 Google 試算表當資料庫,資料安全性如何保障?
    2. 5.2. Q2:Google 試算表資料庫有讀取次數或效能限制嗎?
    3. 5.3. Q3:如何處理跨網域 (CORS) 存取 API 的問題?

為什麼要用 Google 試算表當簡易資料庫?

Google 試算表 (Google Sheet) 作為 簡易資料庫 是一種針對輕量級專案的高效 前端資料儲存方案。其核心定義在於:利用 Google Sheet 的雲端同步與多方協作能力,結合 Google App Script 教學 中的 API 開發技巧,實作資料的 CRUD(增刪查改)。主要實作方式有二:1. Visualization API 應用:適合快速讀取與公開資料展示;2. Google App Script:透過 JavaScript CRUD 實作 建立自定義 API 端點,提供更高的安全控管。這種方式極大降低了維護後端伺服器的成本,特別適合用於活動報名、問卷收集或小型內容管理系統。


前端開發中,有時候我們需要快速、經濟且易於管理的簡易資料庫來儲存和展示資料,而Google 試算表 (Google Sheet) 結合 Google App Script 與 Visualization API 便提供了一個出乎意料的解決方案。

這篇文章將深入簡介如何運用這些工具,將Google 試算表轉化為一個功能實用的後端替代品,特別適合於資料主要用於讀取、更新頻率不高或需要多方協作的輕量級專案。透過這種方式,您可以實現低成本且高效率的資料儲存與管理,為前端開發提供了極大的彈性。

Google 表單與試算表如何成為資料庫

之前在新創公司服務,由於老闆時程超級趕,高手前同事也就想出了這樣的辦法,很厲害的也把 CRUD 的函式都寫好,我接手的時候就只要叫用即可,過了兩年,發現在要和非資訊領域的人合作時,這也是個不錯的解決方案,Google 表單做到了可以防呆輸入,試算表則做到了同步功能,也可以動態額外的新增欄位,這個 Combo 技能如果在不要求效能,或是並沒有頻繁更新的情況下,覺得真的很方便,而且資料還可以同時很多人編輯。

Google 試算表用作簡易資料庫,其優勢在於操作直觀、易於非技術人員協作,並能快速部署以滿足前端開發中的輕量級資料儲存需求。透過 Google 表單實現資料輸入的防呆機制,再利用Google 試算表本身的同步與動態欄位擴展能力,構成了一個靈活的資料儲存方案。然而,這種方法主要適用於對讀取效能要求不高、資料更新頻率低,且資料量不大的情境。對於追求高併發、複雜查詢或嚴格安全性要求的專案,則需考慮更專業的資料庫解決方案。這也體現了在前端開發專案中,靈活選擇資料儲存方案的重要性。

Visualization API

這篇文章有簡易的介紹,主要就是透過更方便的 API 來操作 google 試算表,優點是方便好用,缺點就是別人知道了也可以任意改動我們的資料表了。

官方的參考文件:
https://developers.google.com/chart/interactive/docs/reference

Google Visualization API 提供了一個標準化的介面,允許前端開發者透過查詢語言(類似 SQL)從Google 試算表中提取資料,並將其視覺化。

這種方式對於將Google 試算表作為簡易資料庫使用時,提供了便捷的資料讀取與呈現機制。儘管它極大地簡化了JavaScript資料處理和圖表生成的複雜性,但直接開放 API 存取也伴隨著資料安全性的考量,開發者需要權衡便利性與安全性,確保敏感資料的資料儲存不被濫用。

理解其工作原理對於有效地將Google 試算表整合到前端開發專案中至關重要。

Google App Script

另外一個比較安全一點的方法就是,表單不開放,但透過 App script 去開出 API,缺點就是有些邏輯可能要稍微防呆一下,只用官方的 function 並無法完全符合需求且防掰。

網路上有很多比較複雜的範例,底下就實做了一個簡單方法,主要是去把表單裡的資料全部抓出來,並組成我們要的 JSON 檔。

假設試算表中第一列為資料欄位名稱,第二列才開始是資料,我們可以先跑迴圈把所有的欄位抓出來,再利用欄位的數量去把每一列的資料一一撈出並映射到物件中,最後把物件放進陣列就完成了。

官方的參考文件:
https://developers.google.com/apps-script/

Google App Script 是一個基於 JavaScript 的雲端腳本平台,它允許開發者擴展 Google 試算表、文件、表單等 Google 應用程式的功能。

在將Google 試算表作為簡易資料庫使用時,Google App Script 提供了創建自定義 API 端點的能力,從而更安全、靈活地控制資料的存取與處理。

透過編寫 JavaScript 程式碼,您可以實現資料的讀寫邏輯、執行複雜的資料轉換,甚至與其他 Google 服務或外部 API 進行整合,為前端開發提供了強大的客製化資料儲存解決方案。這不僅提升了資料的安全性,也使得簡易資料庫的功能得到了極大的擴展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function getRows(sheet) {
var jo = {};
var dataArray = [];
var result = {};
var labels = [];
var data = sheet.getDataRange().getValues();
var rows = [];

for (i in data) {
if (!!data[0][i]) {
labels.push(data[0][i]);
}
}

// collecting data from 2nd Row , 1st column to last row and last column
rows = sheet
.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn())
.getValues();

for (var i = 0, l = rows.length; i < l; i++) {
var dataRow = rows[i];
var record = {};

for (j in labels) {
record[labels[j].toString()] = dataRow[j];
}

if (record[labels[1]]) {
dataArray.push(record);
}
}

jo.results = dataArray;
jo.status = 1;

result = JSON.stringify(jo);

return ContentService.createTextOutput(result).setMimeType(
ContentService.MimeType.JSON
);
}

FAQ:Google 試算表資料庫常見問題

Q1:使用 Google 試算表當資料庫,資料安全性如何保障?

A:直接使用 Visualization API 應用 雖然快速,但若試算表權限設為「公開」,任何人都能讀取資料。較安全的高品質做法是使用 Google App Script 並將試算表設為「私有」。您可以透過 Apps Script 擔任中間層,驗證 Token 或特定標頭後才回傳資料,從而實現精確的存取控管與 資料儲存 安全。

Q2:Google 試算表資料庫有讀取次數或效能限制嗎?

A:有的。Google 對於 Apps Script 的執行時間與 API 呼叫次數都有每日配額限制。此外,當資料量達到數千列以上時,讀取與過濾的速度會明顯變慢。因此,Google 試算表簡易資料庫 僅建議用於 MVP 測試、靜態內容管理(如公告、產品列表)等對效能要求較低的 前端開發 場景。

Q3:如何處理跨網域 (CORS) 存取 API 的問題?

A:當您透過 Apps Script 的 doGet()doPost() 發布 Web App 時,Google 會自動處理重新導向。在 JavaScript CRUD 實作 中,請確保您的前端使用 fetchaxios 時,能夠處理 302 導向。通常情況下,只要 URL 正確且發布權限設為「任何人(包含匿名)」,前端就能無障礙地存取這些輕量級 資料儲存 接口。



喜歡這篇文章,請幫忙拍拍手喔 🤣