iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
IT管理

「Google Apps Script」 學習筆記系列 第 19

【Day 19】Google Apps Script - API 篇 - Spreadsheet Service - 電子試算表服務範例-新增內容

來練習幫 Google Sheets(電子試算表)增加一點內容吧,把之前的 API 文件寫到 Sheets 來。


今日要點:
》Spreadsheet Service 電子試算表服務範例
》讀取 Google Docs 中的表格
》把表格的內容寫入到 Google Sheets 裡


Document Service 內容新增

前一天我們簡單介紹在 Google sheets 檔案中,新增了一列欄位的標題列。接下來我們要開始把之前【Day 16】介紹從 API 文件中的表格裡,抓取到的欄位值轉成二維陣列值後,建立一個新的 google Sheets 檔,再把陣列值分段落寫入到 Sheets 中。

轉存至電子試算表後,如果有需要就可以用電子試算表中強大的檢查功能,進行資料的檢查,協助工程師看有沒有地方寫重覆或遺漏的。

上述的描述我們用圖簡單繪製一下流程,如下圖所示:

二維陣列值依表格有分為幾個段落,擷取後儲存至對應的欄位。

如下圖:

正常你會有一個迴圈去把所有的表格抓取出來,計算每個表格中段落的位置,再進行段落的擷取。

不過我們一樣試著把程式碼弄的很簡單,先把一些參數先寫死比較好閱讀。
 

程式碼

我們程式大概分幾個部份

  • 建立一個新的 Google Sheet 檔案。
  • 讀取寫在 Google Docs 文件裡的 API 描述表格,存放在二維陣列裡。
  • 把二維陣列分段落擷取出值。
  • 把值寫入到 Google Sheets 對應的欄位裡。

程式碼如下:

function doGet19(e) {

  //建立一個新的 Sheet 檔案
  doGet18(e);  //參考第18天的說明
  
  //讀取寫在 Google Docs 文件裡的 API 描述表格, 存放在二維陣列裡
  var array = doGet16(e); //參考第16天的說明

二維陣列 array 的值,稍微排版後應該會如下所示:

/* 文件取得的資料結構
[
  ["Docs Demo","getGmailInfo","查詢Gmail資訊"],
  ["說明"," 使用 Google Apps Script 查詢 Gmail 資訊。",""],

  [" Request Url Params ","",""],
    ["鍵值","型別","說明"],
    [" name"," String","查詢人的姓名"],
    [" func (必填)"," String","要呼叫的功能名稱"],

  [" Response Body","",""],
    ["鍵值","型別","說明"],
    [" hello"," String","對查詢人的問候語"],
    [" unreadCount"," Number","收件夾中未讀信件的數量"],
    [" spamCount"," Number","垃圾信件夾中的未讀數量"],
    [" messageSubject"," ArrayObject","最新5筆信件的標題"],

  [" Sample","",""],
    ["Method","GET",""],
    ["URL","https://script.google.com/...",""],
    ["Request","?name=Jason&func=getGmailInfo",""],
    ["Response","{...}",""]
]
*/

依我們的需要把值分段落取出來,SegmentIndex 這裡原本是用程式去算出段落範圍。不過為了方便,我們先固定值。


  var SegmentIndex = [3, 7, 13, 17];
  var arrRequestUrlParams = array.slice(SegmentIndex[0], SegmentIndex[1]-1);  
  var arrResponseBody = array.slice(SegmentIndex[1], SegmentIndex[2]-1);
  var arrSample = array.slice(SegmentIndex[2], SegmentIndex[3]);

把值寫入到 Google Sheets 對應的欄位裡。

  var row = 0 
  var value_A = array[row][0];
  var value_B = array[row][1];
  var value_C = array[row][2];
  var value_D = array[row+1][1];
  var value_E = JSON.stringify(arrRequestUrlParams);
  var value_F = JSON.stringify(arrResponseBody);
  var value_G = JSON.stringify(arrSample);

  setCellValue(row+2, col_A, value_A);
  setCellValue(row+2, col_B, value_B);
  setCellValue(row+2, col_C, value_C);
  setCellValue(row+2, col_D, value_D);
  
  setCellValue(row+2, col_E, value_E);
  setCellValue(row+2, col_F, value_F);
  setCellValue(row+2, col_G, value_G);
}

以上就是把寫在 Google Docs 文件裡的 API 描述表格寫入至 Google Sheets(電子試算表)的範例。

今天就先這樣囉。
 

參考

 


上一篇
【Day 18】Google Apps Script - API 篇 - Spreadsheet Service - 電子試算表服務範例-新增標題
下一篇
【Day 20】Google Apps Script - API 篇回顧整理
系列文
「Google Apps Script」 學習筆記30

尚未有邦友留言

立即登入留言