iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0

今天我們來把試算表當作我們的資料庫,用GAS做CRUD

程式碼解析

function addRecord(id, name, age, note) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
  sheet.appendRow([new Date(), id, name, age, note]);
}
  1. addRecord(id, name, age, note) - 新增資料
    功能: 在試算表的最後一行新增一筆資料。

sheet.appendRow(...): 這是 Google Apps Script 的便利方法,會自動在試算表有資料的最後一列下方,新增一整列的資料。

傳入參數: 接收 id, name, age, note 作為資料,並在最前面加上一個 new Date() 產生的時間戳記,記錄資料新增的時間。

function getRecords() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
  var data = sheet.getDataRange().getValues();
  Logger.log(data);
  return data;
}
  1. getRecords() - 讀取所有資料
    功能: 讀取試算表中所有資料。

sheet.getDataRange().getValues(): 這是一組常用的連鎖方法。

getDataRange():取得試算表中所有包含資料的範圍。

getValues():將這個範圍內的資料讀取出來,並以二維陣列(array of arrays)的形式返回。

Logger.log(data): 將讀取到的資料印在 Google Apps Script 的執行記錄中,方便開發者除錯。

function getRecordById(id) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) {  // 從第2列開始
    if (data[i][1] == id) { // 第2欄是 ID
      return data[i];
    }
  }
  return null; // 找不到
}

getRecordById(id) - 查詢資料
功能: 根據傳入的 id,在試算表中找到對應的那一列資料。

for (var i = 1; i < data.length; i++): 程式碼用迴圈從第二列開始讀取(索引 i=1),這樣可以跳過第一列的標題,直接從資料部分開始尋找。

if (data[i][1] == id): 判斷陣列中的第二個欄位(索引 1)是否等於傳入的 id。

回傳: 如果找到相符的資料,就回傳該列的陣列;如果整個試算表都找不到,則回傳 null。

function updateRecord(id, newName, newAge, newNote) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) {
    if (data[i][1] == id) {
      sheet.getRange(i+1, 3).setValue(newName);  // 第3欄 姓名
      sheet.getRange(i+1, 4).setValue(newAge);   // 第4欄 年齡
      sheet.getRange(i+1, 5).setValue(newNote);  // 第5欄 備註
      return true;
    }
  }
  return false;
}

updateRecord(id, newName, newAge, newNote) - 更新資料
功能: 根據傳入的 id,更新對應列的姓名、年齡和備註。

sheet.getRange(i+1, 3).setValue(newName):

i+1:因為陣列索引從 0 開始,而試算表列數從 1 開始,所以需要將找到的索引加 1,才能對應到正確的列。

3:代表要更新試算表的第三欄(姓名)。

回傳: 更新成功則回傳 true,找不到 id 則回傳 false。

function deleteRecord(id) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) {
    if (data[i][1] == id) {
      sheet.deleteRow(i+1); // i+1 因為陣列從 0 開始
      return true;
    }
  }
  return false;
}

deleteRecord(id) - 刪除資料
功能: 根據傳入的 id,刪除對應的那一列資料。

sheet.deleteRow(i+1): 這是 Google Apps Script 提供的刪除列方法,同樣需要將陣列索引 i 轉換為試算表的列數 i+1。

回傳: 刪除成功則回傳 true,找不到 id 則回傳 false。


上一篇
D26 自動產生文件 & PDF
下一篇
D28 資料庫整合
系列文
Google App Script雲端自動化與動態網頁實戰28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言