Google sheet 資料 庫

|本文圖片與內容均由《梅問題教學網》授權行銷人轉載、編輯,原文出處。

上一篇(進階技巧:利用Google Script將Google試算表變成簡易資料庫)分享過,利用Google Script,將Google Sheets試算表,變成一個雲端資料庫來使用,並可將資料以GET或POST的方式寫入,由於是透過Google Script因此自由度相當的高,也不用受限於Google表單,甚至也不用逐一的去尋找每個欄位名稱,同時當資料寫入後,也可回傳完成的資訊,當接受到完成訊息後,可再做後續相關的處理,雖然剛開始不熟悉,會覺得有些繁鎖,但熟悉後,會愛上Google Script。

竟然是資料庫,當然可寫入也要可查詢,因此接下來梅干將分享,如何透過Google Script,來查詢Google Sheets試算表中的資料,讓消費者可查詢訂單的相關資料,因此要如何做,現在就一塊來看看吧!

步驟1:首頁,開啟要查詢的Google試算表,接著選擇 工具 / 指令碼編輯器。

步驟2:將下方的語法貼上後,並修改試算表的ID與頁籤名稱後,接著就是要查詢的欄位序號,以梅干這個試算表來說,因為是以訂單編號作為查詢欄位,所以它的欄位序號就為1,若要以姓名的話,就得改為data[i][3],依此類推。

Google sheet 資料 庫

<pre><code>function doGet(e) { /*查詢表單*/ var params = e.parameter; var type = params.type; var time = params.order_time; var no = params.order_no; var pay = params.order_pay; var SpreadsheetAppId = &quot;試算表ID&quot;; var getSheetByName =&quot;試算表頁籤名稱&quot;; if(type == &quot;select&quot;){ var SpreadSheet = SpreadsheetApp.openById(SpreadsheetAppId); var Sheet = SpreadSheet.getSheetByName(getSheetByName); var LastRow = Sheet.getLastRow(); var data = []; for(i=0; i&lt;LastRow; i++){ data[i] = []; } data = Sheet.getRange(1,1,LastRow,8).getValues(); var time,pay,name; var output=[]; for(i=0; i&lt;LastRow; i++){ if(data[i][1]==no){ //查詢的欄位序號 output.push({output:data[i],index:i}); }//if }//for return ContentService.createTextOutput(JSON.stringify(output)) .setMimeType(ContentService.MimeType.JSON); }//select }//doGet </code></pre><p></p>

步驟3:設定好後,再按 發布/ 部署為網路應用程式。

步驟4:接著將權限設為任何人。

步驟5:再按核對權限,而過程會與先前的寫入篇一樣。

步驟6:再把權限設定完畢後,就會看到一串網址,而這網址就是串接的API網址。

步驟7:這時可用Postman工具,先進行測試一下,首先上方先貼上剛的API網址,下方再貼入參數。

步驟8:再按下Send後,就會以json的格式作顯示,這時各位就可依自己的需求,處理所需的資料欄位。

步驟9:在梅干的範例頁面(測試平台)中,在訂完畢後,就會看到訂單查詢的輸入框。

步驟10:當按下送出後,隨即就會帶出訂單的狀態,因此是不是覺得超方便的呀!!如此一來Google試算表,不但可寫入,還可查詢,就跟在使用資料庫一樣,而有需要的朋友,不妨也可試試看囉!

更多行銷人報導
【Google Sheets】企劃人必學!用Google試算表就可以直接生成精美圖表
【Google Sheets】別再複製貼上了!教你如何同步多個Google試算表資料

這篇文章 【Google Sheets】進階技巧2:試算表變身資料庫,輕鬆查詢訂單 最早出現於 行銷人。

想要弄自己的資料庫,卻又不知道該怎麼做,只知道要建立欄位,而Google的試算表就能達成這件事。只要 :

  • 建立欄位名稱
  • 輸入欄位資料
  • 發布至網路
  • 簡易的程式碼

就能撈取 JSON格式資料並使用 Get、Post等方式來存取了。

建立資料

  • 在試算表中建立一份新檔案
  • 在第一行中輸入欄位名稱(資料庫關係,建議全英文)
  • 在第二行中輸入對應資料,像是這樣
skilldescription
html 網頁標籤與結構化
CSS/SASS 使用 SASS格式撰寫 CSS

發布資料

發布資料有兩種方式 :

  1. 直接將試算表發佈到網路
    • 提供給所有人檢視
  2. 使用指令碼編輯器撰寫程式碼並發布
    • 知道連結的人可供檢視
    • 可以不公開至網路(像是非公開資料但需要寫入)

這兩種方式中,我們會還會用到

  • 試算表的 ID,可以在試算表的網址列中找到
    • https://docs.google.com/spreadsheets/d/試算表的ID/edit#gid=0
  • 試算表的工作表之索引值
    • 若為一般發布,索引值從 1 開始,也就是第幾張工作表
    • 若使用指令碼編輯器,程式碼中的索引值為陣列,從 0 開始

發布自建試算表

  • 在試算表的工具列中,找到 檔案,這個選項,然後選擇 發佈到網路
  • 按下發布後,對話視窗關掉即可

指令碼編輯器

  • 在試算表的工具列中,找到 工具 這個選項,然後選擇 指令碼編輯器
  • 將預設的 function內容改為以下程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19


function doGet() {
var id = '試算表網址列的 ID';


var spreadsheet = SpreadsheetApp.openById(id);
var sheet = spreadsheet.getSheets()[0];
var data = sheet.getDataRange().getValues();



var dataExportFormat = JSON.stringify(data);




return ContentService.createTextOutput(dataExportFormat).setMimeType(ContentService.MimeType.JSON);
}
  • 在編輯器的工作列中,找到 發布 這個選項,然後選擇 部屬為網頁應用程式
    • Project version : 每次發布時都需要修改版本編號
    • Execute the app as: 選擇誰可以執行這個 APP
    • Who has access to the app: 選擇誰可以訪問這個 APP
  • 按下更新後,取得該 APP的網址 https://script.google.com/macros/s/一連串的亂碼/exec

讀取資料

跨網域問題

為什麼需要將試算表發布為公開可檢視,是因為我們在撈取資料時,會遇到跨網域存取的問題,存放在 google的資料預設不給其他網站存取,但經過設定後,就能正常存取我們要的資料。另外,像是政府的開源資料,也常會遇到跨網域的問題,原因是同源政策,開源資料的網址在瀏覽器中可以正常讀取,但在測試用的線上程式編輯器就無法存取,因為它們無法跨網域存取資源,透過 Google Apps Script重新發布後,就能解決這個問題。

讀取自建試算表

可以到線上程式碼編輯器等網站測試,codePen或者其他都可以,利用 fetch語法或者套件 axios進行資料撈取。

  1. 讀取 發布至網路 的試算表

    • 其網址為 https://spreadsheets.google.com/feeds/list/試算表的ID/第?張工作表/public/values?alt=json
    • 若要改回非公開,再回到 發佈到網路 ,按下停止發布即可
  2. 讀取 部屬網頁應用程式

    • 不以 發布至網路 形式公開
    • 其網址為 https://script.google.com/macros/s/一連串的亂碼/exec
    • 在網址列輸入後,會轉成另外一串亂碼網址,內容是相同的

作為中繼點後讀取

  • 新建一份試算表
  • 在程式碼編輯器中,將 doGet的內容替換掉
1
2
3
4
5
6
7
8
9
10
11
12

function doGet(e){

var url = e.parameter.url;


var response = UrlFetchApp.fetch(decodeURIComponent(url),{
headers: { "Content-type" : "application/json" }
});
var data = JSON.parse(response.getContentText());
return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON);
}
  • 發布後取得 https://script.google.com/macros/s/試算表的 ID/exec?
  • 在這串網址後方接上開源資料的網址,
    https://script.google.com/macros/s/試算表的 ID/exec?url=開源資料的網址

參考來源

  1. Augustus 的學習筆記 - 如何用Google Excel當作資料庫
  2. Augustus 的學習筆記 - 用Google Apps Script取得Google Excel資料
  3. Ray - 使用 Google Apps Script 解決 CORS 問題
  4. OXXO.STUDIO - 簡易後端實作 ( Google Apps Script )