[流程設計參考] 多份設備銷售明細表樞紐

需求說明

彙整指定資料夾內的所有月份銷售明細表,需根據月份、商品名稱來加總銷售金額合計的欄位,最後輸出一份表格,格式如下 :

月份 商品名稱 銷售金額合計加總
202001 伺服器 210000
202001 電腦 50000

需要檔案

  1. x月設備銷售明細表.xlsx :
    L03 課程中範例所使用的銷售明細表,所有檔案皆放在同一資料夾內。

技能設計

1. 流程規劃

建立檔案列表 > 修改檔案名稱 > 循環表格工作 > EXCEL表格處理

2. 開發細節

2.1 建立檔案列表

使用 建立檔案列表 將指定資料夾中所有的檔案路徑整理為一 CSV 檔案,提供循環表格工作 使用。
進入模組之後,點選 PICK 選擇指定的資料夾。

撰寫程式碼輸出資料夾內所有的檔案路徑,程式碼請參考以下 :

//將指定資料夾中所有檔案路徑輸出為一張 CSV 表格
input.forEach(file => output.push(file))

此時工作資料夾應該要生成 output.csv 檔案,檔案內容如下 :

2.2 修改檔案名稱

為了避免與之後步驟生成的 CSV 檔案混淆,建議每次生成一檔案後,都修改為可辨認的名稱,此步驟將 output.csv 修改為 loopList.csv

2.3 循環表格工作

接著使用循環表格工作,根據 loopList.csv 來批次處理 EXCEL。

2.4 EXCEL 表格處理

設定

  1. 檔案路徑為 : %row-filepath%
  2. 表頭列 : 使用 DETECT 自動生成並修正
  3. 資料起點 : A4

下方程式碼題供參考 :
參考連結 : Lodash, moment

// input[{}] represents row objects of excel sheet
// output[{}] represents row objects of output sheet
//1. 先建立一個可查詢的字典(物件),商品名稱為 key,加總後的銷售金額合計為 value
//ex : {'印表機' : 10000, '伺服器' : 100000, ...}
let resultObj = {}
//2. 根據每一筆資料的商品名稱,將金額加到 resultObj 對應的 key-value 裡
input.forEach((row) => {
  // 2.1 _.set(obj, path(key), value) : 可以將 value 根據 path 放到 obj 裡
  _.set(
    //obj
    resultObj,
    //path
    `${row['商品名稱']}`,
    //之前資料的加總 + 這次資料的加總
    // _.result(obj, path, default value) : 
    // 將 obj 中對應的 path 的 value 取出,若找不到則設定為  default value
    _.result(resultObj, `${row['商品名稱']}`, 0) + row['銷售金額合計']
  )
})
//3. 將 resultObj 的結果轉換為輸出表格的格式 : 物件陣列(key 為表頭, value 為值)
// ex : [{'商品名稱' : '印表機', '加總銷售金額' : 200000}, {...}, {...}]
Object.keys(resultObj).forEach(key => {
  output.push({
  //同個檔案內都是同一月份,取出此檔案的第一筆資料中日期資訊做為此月份的輸出
    '月份' : moment(input[0]['銷售日期']).format('YYYYMM'),
    '商品名稱' : key,
    '加總銷售金額合計' : resultObj[key]
  })
})

2.5 完成訓練並上傳

完成後,退出循環模式,結束訓練,並上傳至 SKILLHUB。