今天我們來把試算表當作我們的資料庫,用GAS做CRUD
function addRecord(id, name, age, note) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("資料庫");
sheet.appendRow([new Date(), 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;
}
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。