iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Modern Web

Google Apps Script 整合運用系列 第 3

在試算表儲存資料(二)

  • 分享至 

  • xImage
  •  

客戶資料管理

  1. 後台管理,會有 新增(C)、編輯(U)、查詢(R)、刪除(D)。因為試算表的列指標,會有變動,如刪除或排序. 所以用流水號來代表唯一的記錄。當新增時流水號為「''」,編輯時流水號的值須在客戶工作表裡面
  2. 上個單元,我們已經有辦法將資料儲存到一個儲存格,接下來會用迴圈來完成一筆記錄
  3. 結構欄位:流水號、客戶名稱、客戶電話、客戶地址、備註
    流水號:自訂,這裡不使用列編號,因為列編號會因刪除、排序而有所改變
    客戶電話:行動電話的開頭為 0,在試算表若無設定格式,則會視數字而不見
  4. 標題
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('備註');
}
  1. 函式(function):通常會把處理事件的指令集合在一起,來完成事件,
    分析第1項,我們可以建立一個函式 setCellData(sheet, rowIndex, colIndex, value)
    setCellData:函式名稱,請不要重覆,若重覆則會以放在檔案列表的順序決定執行,最後面的檔案會要被執行
    sheet, rowIndex, colIndex, value:函式的參數,當我們調用函式時,可以透過參數傳遞「變數」進入函式
  2. 像第1項的函式,我們會用「迴圈」來執行資料處理
    for...in :物件 與 陣列 都可使用,物件迭代「屬性」、陣列迭代「索引」,不過迭代的變數的型態是「字串」,若有需要計算,記得轉型為「數字」
    https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/for...in
  3. 例:在 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);
}

  1. 將標題列整理成陣列資料,然後跑迴圈
/*========================================
設定標題列 
=========================================*/
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() 其實就是 寫入一列(一筆記錄)的函式
9. 設定客戶資料

/*========================================
設定客戶資料 
=========================================*/
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. 客戶資料,有二個地方需要調整

客戶電話:第1個'0'被吃掉了,因為儲存格的格式自動變成「數字」格式,如果資料是字串,則在寫入時需要特別處理,
setNumberFormat('@') :將數字或日期格式,設為「字串」。
https://developers.google.com/apps-script/reference/spreadsheet/range?hl=zh-tw#setnumberformatnumberformat

新增資料,希望可以自動偵測寫入最後資料那列的下一列
getLastRow():取得工作表的最後列指標
getLastColumn():取得工作表的最後欄指標

Yes


上一篇
在試算表儲存資料(一)
下一篇
在試算表儲存資料(三)
系列文
Google Apps Script 整合運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言