Google 試算表實作簡易資料庫 Google Sheet, App script, Visualization API

me
林彥成
2019-03-28 | 2 min.
文章目錄
  1. 1. Google 表單與試算表如何成為資料庫
  2. 2. Visualization API
  3. 3. Google App Script

這篇文章會簡介怎麼運用 Google Sheet, App script, Visualization API 實作簡易資料庫,只需要將規則處理清楚,做為比較常用來讀取使用的簡易的資料庫是非常實用。

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

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

Visualization API

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

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

Google App Script

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

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

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

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

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
);
}

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


share