鐵人賽-Google Apps Script整合運用
客戶資料管理
- 後台管理,會有 新增(C)、編輯(U)、查詢(R)、刪除(D)。因為試算表的列指標,會有變動,如刪除或排序. 所以用流水號來代表唯一的記錄。當新增時流水號為「''」,編輯時流水號的值須在客戶工作表裡面
- 上個單元,我們已經有辦法將資料儲存到一個儲存格,接下來會用迴圈來完成一筆記錄
- 結構欄位:流水號、客戶名稱、客戶電話、客戶地址、備註
流水號:自訂,這裡不使用列編號,因為列編號會因刪除、排序而有所改變
客戶電話:行動電話的開頭為 0,在試算表若無設定格式,則會視數字而不見 - 標題
function myFunction() {
let ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('day2');
let range = ws.getRange(1, 1);
range.setValue('流水號');
range = ws.getRange(1, 2);
range.setValue('客戶名稱');
range = ws.getRange(1, 3);
range.setValue('客戶電話');
range = ws.getRange(1, 4);
range.setValue('客戶地址');
range = ws.getRange(1, 5);
range.setValue('備註');
}
- 函式(function):通常會把處理事件的指令集合在一起,來完成事件,
分析第1項,我們可以建立一個函式 setCellData(sheet, rowIndex, colIndex, value)
setCellData:函式名稱,請不要重覆,若重覆則會以放在檔案列表的順序決定執行,最後面的檔案會要被執行
sheet, rowIndex, colIndex, value:函式的參數,當我們調用函式時,可以透過參數傳遞「變數」進入函式 - 像第1項的函式,我們會用「迴圈」來執行資料處理
for...in :物件 與 陣列 都可使用,物件迭代「屬性」、陣列迭代「索引」,不過迭代的變數的型態是「字串」,若有需要計算,記得轉型為「數字」
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/for...in - 例:在 set_head_custom(), 調用 「setCellData()」
/*========================================
設定客戶標題列
=========================================*/
function set_head_custom() {
setCellData('day2', 1, 1, '流水號');
setCellData('day2', 1, 2, '客戶名稱');
setCellData('day2', 1, 3, '客戶電話');
setCellData('day2', 1, 4, '客戶地址');
setCellData('day2', 1, 5, '備註');
}
/*========================================
資料寫入單一儲存格
=========================================*/
function setCellData(sheet, rowIndex, colIndex, value) {
let ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet);
let range = ws.getRange(rowIndex, colIndex);
range.setValue(value);
}
- 將標題列整理成陣列資料,然後跑迴圈
/*========================================
設定標題列
=========================================*/
function set_head_custom() {
// setCellData('day2', 1, 1, '流水號');
// setCellData('day2', 1, 2, '客戶名稱');
// setCellData('day2', 1, 3, '客戶電話');
// setCellData('day2', 1, 4, '客戶地址');
// setCellData('day2', 1, 5, '備註');
let headData = ['流水號', '客戶名稱', '客戶電話', '客戶地址', '備註']; //headData[0] => '流水號' 、headData[1] => '客戶名稱' .....
let sheet = 'day2';
let rowIndex = 1;
for (let i in headData) {
let colIndex = Number(i) + 1;//i 型態為字串,須轉為數字做計算
setCellData(sheet, rowIndex, colIndex, headData[i]);
}
}
此時 set_head_custom() 其實就是 寫入一列(一筆記錄)的函式
- 設定客戶資料
/*========================================
設定客戶資料
=========================================*/
function set_data_custom() {
let sheet = 'day2';
let rowIndex = 2;
let customData = [1, '育將電腦', '0123456789', '台南市永康區大灣路158號', '備註1'];
for (let i in customData) {
let colIndex = Number(i) + 1;//i 型態為字串,須轉為數字做計算
setCellData(sheet, rowIndex, colIndex, customData[i]);
}
rowIndex = 3;
customData = [2, 'Google', '1234567890', '美國', '備註2'];
for (let i in customData) {
let colIndex = Number(i) + 1;//i 型態為字串,須轉為數字做計算
setCellData(sheet, rowIndex, colIndex, customData[i]);
}
}
- 客戶資料,有二個地方需要調整
客戶電話:第1個'0'被吃掉了,因為儲存格的格式自動變成「數字」格式,如果資料是字串,則在寫入時需要特別處理,
setNumberFormat('@') :將數字或日期格式,設為「字串」。
https://developers.google.com/apps-script/reference/spreadsheet/range?hl=zh-tw#setnumberformatnumberformat
新增資料,希望可以自動偵測寫入最後資料那列的下一列
getLastRow():取得工作表的最後列指標
getLastColumn():取得工作表的最後欄指標
.videobox {
position: relative;
width: 100%;
height: 0;
padding-bottom: 56.25%;
}
.videobox iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Youtube影片:https://youtu.be/J3m4C1OaxuQ