iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
IT 管理

30 天玩轉 GAS: 打造你的個人自動化助手系列 第 8

[Day 8] GAS - Google Sheet 操作大全 Part 1 - 讀取資料

  • 分享至 

  • xImage
  •  

今天要來跟大家介紹算是我最常使用的工具 - Google sheet!

Google sheet 可是 GAS 最重要的應用之一,因為 Google sheet 能被用來儲存資料,也可進而去操作、複製、產出其他的應用,像是用 google sheet 中的資料去產出不同的 doc, slide 等等。

因此學會如何用 GAS 去操作 google sheet 就變得相當重要!!
我們就用從學資料庫「讀寫刪改」的步驟一起來學 google sheet 的操作吧!

不論是讀取或寫入資料,把握一個原則: 先選取,再讀/寫
下面會有大量 getRange() 選取資料的應用,我們直接從實例中學習吧~

讀取資料

以下將依序介紹如何讀取單個儲存格、一個範圍的儲存格,或者整列、整欄資料。

讀取單個儲存格 getValue()

假設我們想讀取A1儲存格的內容:

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cellValue = sheet.getRange('A1').getValue();
  Logger.log('A1的值是: ' + cellValue);
}

getRange('A1'): 選擇A1儲存格。
getValue(): 獲取儲存格中的值。
getRange() 除了參數可以用 A1 標記/ R1C1 標記法 去取值以外也可以使用行列數來去取值:

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cellValue = sheet.getRange(0,0).getValue();
  Logger.log('A1的值是: ' + cellValue);
}

讀取一個範圍的儲存格 getValues()

如果你想讀取一個範圍內的多個儲存格,例如A1到B2:

function readRange() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rangeValues = sheet.getRange('A1:B2').getValues();
  Logger.log('A1到B2的值是: ' + rangeValues);
}

getRange('A1:B2'): 選擇從 A1 到 B2 的範圍。
getValues(): return 一個"二維"陣列,包含該範圍內的所有儲存格值。

選取多個範圍的儲存格 getRangeList()

function readRangeList() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rangeValues = sheet.getRange('A1:B2').getValues();
  var rangeList  = sheet.getRangeList(['A1:D4', 'F1:H4']);
}

getRangeList(): return 一個 range 型別的二維陣列,包含所有範圍的所有儲存格值。

讀取整列或整欄資料

讀取整列

假設你想讀取第1列的所有值:

function readRow() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rowValues = sheet.getRange(1, 1, 1).getValues();
  Logger.log('第1列的值是: ' + rowValues[0]);
}

讀取整欄

假設你想讀取第1欄的所有值:

function readColumn() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var columnValues = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  Logger.log('第1欄的值是: ' + columnValues);
}

Note:
getRange() 不同的參數數量也會返回不同範圍的值,如下定義:

getRange(row, column) 傳回指定座標左上方的儲存格範圍。
getRange(row, column, numRows) 傳回指定座標的左上角儲存格範圍,以及指定列數的範圍。
getRange(row, column, numRows, numColumns) 傳回指定座標上左上角儲存格的範圍,此範圍包含指定的資料列與欄數。

不過基本上,白話一點就是從 (row, column) 這個座標往下框 numRows, 往右框 numColumns 矩形範圍的值
Google sheet get range

Note: 起始列數/行數 default 從 0 開始唷!

讀取並處理資料

讀取資料後,通常我們會對其進行一些處理,例如遍歷、計算或篩選。
以下是一個範例,讀取第一欄的所有資料,並計算其中數值的總和:

function sumColumnValues() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var columnValues = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  
  var totalSum = 0;
  columnValues.forEach(function(row) {
    totalSum += row[0];
  });
  
  Logger.log('第1欄的總和是: ' + totalSum);
}

forEach: 用來迭代每一列中的值,並進行累加計算。

Google sheet Get 相關的函式相當多,以下整理一些較常使用到的:

函式 型別 回傳
getDataRange() Range 與顯示資料的維度相對應的 Range
getLastColumn() Integer 最後一欄包含內容的位置
getLastRow() Integer 最後一列包含內容的位置
getRangeList(a1Notations) RangeList RangeList 集合,代表由 A1 標記或 R1C1 標記的非空白清單指定同一工作表中的範圍
getSelection() Selection 試算表中目前的 Selection
getSheetId() Integer 這個物件所代表的工作表 ID
getSheetName() String 工作表名稱

想看更多可直接參考官方文件
https://developers.google.com/apps-script/reference/spreadsheet/sheet

後面有時間會再進一步介紹這些函式,接下來繼續對 Google sheet 工作表「寫入」!


上一篇
[Day 7] GAS - 自訂選單 & 對話方塊
下一篇
[Day 9] GAS - Google Sheet 操作大全 Part 2 - 寫入資料
系列文
30 天玩轉 GAS: 打造你的個人自動化助手13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言