今天我們對單據管理系統新增一個功能,就是查詢並修改。
只要我們的試算表裡面有同樣的單據編號就可以更改!
// 查詢單據
function queryBill(billNo) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("單據資料");
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][0] == billNo) { // 假設單據編號在第一欄
var billData = {
billNo: data[i][0],
customerName: data[i][1],
item: data[i][2],
amount: data[i][3],
date: data[i][4],
notes: data[i][5],
row: i + 1
};
return JSON.stringify(billData);
}
}
return JSON.stringify({ error: "查無此單據編號。" });
}
SpreadsheetApp.getActiveSpreadsheet():取得目前開啟的 Google 試算表。
.getSheetByName("單據資料"):取得名為「單據資料」的工作表。
sheet.getDataRange().getValues():取得該工作表的所有資料,並以二維陣列形式存放。
for (var i = 1; i < data.length; i++):從第 2 列開始(i=1),跳過標題列。
if (data[i][0] == billNo):判斷該列的單據編號(第 1 欄)是否等於使用者查詢的 billNo。
如果找到匹配的單據:
建立一個 billData 物件,包含該單據所有欄位資料。
row: i + 1:記錄資料所在的實際列數(Google 試算表從 1 開始計數)。
使用 JSON.stringify 將物件轉成 JSON 字串返回,方便前端解析。
如果整個迴圈跑完都沒有找到單據編號,就回傳一個 JSON 物件,告訴前端查無資料。
前端可以用 JSON.parse() 解析這個字串,並顯示錯誤訊息。
// 修改單據
function editBill(data) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("單據資料");
var row = Number(data.row);
var newValues = [
data.billNo,
data.customerName,
data.item,
data.amount,
data.date,
data.notes
];
sheet.getRange(row, 1, 1, 6).setValues([newValues]);
return "單據修改成功!";
}
取得名為「單據資料」的工作表。
data.row 是前端傳來的資料所在列數(查詢時記錄的 row)。
Number(data.row) 把它轉成數字型態,確保後續操作正確。
將修改後的單據資料整理成一個陣列 newValues,順序對應試算表的欄位:
[單據編號, 客戶名稱, 品項, 金額, 日期, 備註]
sheet.getRange(row, 1, 1, 6):從第 row 列,第 1 欄開始高度 1 列,寬度 6 欄,也就是定位到這筆資料的整行。
.setValues([newValues]):把整理好的陣列寫入這一行, setValues 需要一個「二維陣列」,所以外層加了 [ ]。
網站:單據管理系統實作