iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
IT管理

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

【Day 16】Google Apps Script - API 篇 - Document Service - 文件服務範例-讀取表格

來練習讀取 Google 文件中的表格內容吧。


今日要點:
》Document Service 文件服務範例
》表格內容讀取


Document Service 內容讀取

前一天我們簡單介紹了Google 文件新增標題與表格建立,今天繼續來練習讀取表格內容 API 程式使用。我們系列主要是讀取文件中表格的內容來做資料格式轉換,所以首先我們要先可以抓取到表格欄位的內容。

表格與抓取的內容對照如下圖:

我們表格最大列數是17列(Row),最大欄數是3欄(Col),所以抓取出來的二維陣列就是 17x3 的陣列。如果有合併的欄位, 那就只有第一個有值,其他被合併的是沒有值。

我們再實驗一個小的表格讓你看的更清楚,下圖的表格裡有合併3列3欄的格子,我們的來看看陣列的值。

可以看到,合併的格子,只有最左上角的格式有值,其他都是空值。

程式碼

我們程式大概分幾個部份

  • 取得所有的表格集合(tables)
  • 讀取每一個表格(table)
  • 讀取表格中的每一列(row)
  • 讀取一列中的每一欄(col)
  • 把欄位值存到陣列 array[row][col] = celltext;

程式碼如下:

function get(e){
  readDocById('1AvS30VgjUNSYwg_sEpOd...');  //鐵人賽 API 文件 Demo
}

function readDocById(id) {

  var doc = DocumentApp.openById(id);  
  
  //取得所有的表格集合(tables)
  var tables = doc.getBody().getTables();

  //讀取每一個表格(table)
  for (var tableIndex in tables)
  {
    var table = tables[tableIndex]; //取出第 n 個 table
    var rows = table.getNumRows();  //取得有幾列

    //讀取表格中的每一列(row)
    var array = [];
    for ( var rowIndex = 0; rowIndex < rows; ++rowIndex ) {
      var row = table.getRow(rowIndex)

      //讀取一列中的每一欄(col)
      array[rowIndex] = [];
      for ( var colIndex=0; colIndex < row.getNumCells(); ++colIndex) {
        var celltext = row.getChild(colIndex).getText();

        array[rowIndex][colIndex] = celltext;
      }
    }

    Logger.log(JSON.stringify(array)); // debug

  }

}

以上就是表格內容讀取的範例,可以抓取到表格欄位的內容後,之後就能依需要轉成特定的格式了,今天就先這樣囉。

參考



上一篇
【Day 15】Google Apps Script - API 篇 - Document Service - 文件服務範例-新增內容
下一篇
【Day 17】Google Apps Script - API 篇 - Spreadsheet Service - 電子試算表服務介紹
系列文
「Google Apps Script」 學習筆記30

尚未有邦友留言

立即登入留言