Title1

Title2

Title3

3. 在試算表儲存資料(二)

客戶資料管理

  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('備註');
    }
    

     

  5. 函式(function):通常會把處理事件的指令集合在一起,來完成事件,
    分析第1項,我們可以建立一個函式 setCellData(sheet, rowIndex, colIndex, value)
    setCellData:函式名稱,請不要重覆,若重覆則會以放在檔案列表的順序決定執行,最後面的檔案會要被執行
    sheet, rowIndex, colIndex, value:函式的參數,當我們調用函式時,可以透過參數傳遞「變數」進入函式
  6. 像第1項的函式,我們會用「迴圈」來執行資料處理
    for...in :物件 與 陣列 都可使用,物件迭代「屬性」、陣列迭代「索引」,不過迭代的變數的型態是「字串」,若有需要計算,記得轉型為「數字
    https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/for...in
  7. :在 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);
    }
    
    

     

  8. 將標題列整理成陣列資料,然後跑迴圈
    /*========================================
    設定標題列 
    =========================================*/
    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]);
      }
    }
    
    

     

  10. 客戶資料,有二個地方需要調整


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

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

Youtube影片:https://youtu.be/J3m4C1OaxuQ