在 Google Apps Script 內,透過 GetRange()、GetValue() 和 SetValue() 等相關函數,來針對 Google Sheets 進行 CRUD
Sample Data
請 AI 生成資料,故意把 RowPosition = 7 資料清除,變成空白資料
完整 .gs Code
後續會各別拆解說明
function CRUD() {
// 取得目前作用中的試算表
let sheetID = GetSheetID();
let sheetName = 'Data';
let ss = SpreadsheetApp.openById(sheetID);
let sheet = ss.getSheetByName(sheetName);
// 1. 顯示全部資料範圍內的資料
// 會把第一 Row 標題一併顯示出來
let dataRange = sheet.getDataRange().getValues();
ShowData(dataRange);
// 可以明確指定起始 Row,就可以避開第 1 row 的標題
let range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
Logger.log("getLastColumn():" + sheet.getLastColumn());
Logger.log("getLastRow():" + sheet.getLastRow());
ShowData(range);
// 2. 取得特定 Row、Cell 資料
// 取得特定 Row 資料,使用 getSheetValues 來取值
let rowRange = sheet.getSheetValues(3, 1, 1, -1);
ShowData(rowRange);
// 取得特定 Cell 資料
let cellRange = sheet.getRange(8, 2).getValues();
ShowData(cellRange);
// 3. 新增一筆資料:
var insertData = ["GAS", "gas@gmail.com", "2025/10/05", "0909-010-101"];
sheet.appendRow(insertData);
let insertRange = sheet.getSheetValues(sheet.getLastRow(), 1, 1, -1);
ShowData(insertRange);
// 4. 更新資料:更新指定 cell 內資料
let updateRange = sheet.getRange(8, 4);
// 顯示更新前資料
ShowData(updateRange.getValues());
// 更新資料
updateRange.setValue("從 GAS 進行更新");
// 顯示更新後資料
ShowData(updateRange.getValues());
// 5. 刪除資料:刪除指定 RowPosition 的 Row
let deleteRange = sheet.getRange(7, 1);
sheet.deleteRow(deleteRange.getRow());
}
function ShowData(values) {
for (let i = 0; i < values.length; i++) {
let row = '';
for (let j = 0; j < values[i].length; j++) {
if (values[i][j]) {
row = row + values[i][j];
}
row = `${row},`;
}
Logger.log(row);
}
}
顯示全部資料範圍內的資料
使用 GetDataRange() 或是 GetRange() 來取得全部資料範圍後,再透過 GetValues() 來取得資料
- GetRange(row , column , numRows , numColumns):指定起始 cell ( row 和 column) 並回傳指定的資料筆數 (numRows) 和欄位數 (numColumns)
- GetDataRange:取得對應資料的 Range,等同於 GetRange(1 , 1 , Sheet.getLastRow() , Sheet.getLastColumn())
GetDataRange() 會包含第一 Row 標題,希望 Range 不包含第一 Row 的話,可以使用 GetRange(2 , 1 , Sheet.getLastRow() - 1 , Sheet.getLastColumn())
let range = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
Logger.log("getLastColumn():" + sheet.getLastColumn());
Logger.log("getLastRow():" + sheet.getLastRow());
ShowData(range);
getDataRange() 和 getRange() 都會把範圍內的空白 Row 一併顯示出來,不會自動過濾掉
取得特定 Row 或 Cell 資料
取得指定起始 cell ( startRow 和 startColumn) 並回傳指定的資料筆數 (numRows) 和欄位數 (numColumns) 的值,比較特別的是 numRows 和 numColumns 設定為 -1 的話,代表最後一 Row 和最後一 Column,可以不透過 Sheet.getLastRow()、Sheet.getLastColumn() 取得
基本上 getSheetValues() 等同於 getRange() + getValues()
let rowRange = sheet.getSheetValues(3, 1, 1, -1);
ShowData(rowRange);
新增資料
let insertData = ["GAS", "gas@gmail.com", "2025/10/05", "0909-010-101"];
sheet.appendRow(insertData);
let insertRange = sheet.getSheetValues(sheet.getLastRow(), 1, 1, -1);
ShowData(insertRange);
更新資料
let updateRange = sheet.getRange(8, 4);
// 顯示更新前資料
ShowData(updateRange.getValues());
// 更新資料
updateRange.setValue("從 GAS 進行更新");
// 顯示更新後資料
ShowData(updateRange.getValues());
刪除資料
rowPosition:Row 位置,第一 Row 從 1 開始,不是 0 喔
從文件上發現 getRow() 和 getRowIndex() 都是取得 RowPosition,但 getRowIndex() 在名稱上容易引起誤會
let deleteRange = sheet.getRange(7, 1);
sheet.deleteRow(deleteRange.getRow());






沒有留言:
張貼留言