需求說明
彙整指定資料夾內的所有月份銷售明細表,需根據月份、商品名稱來加總銷售金額合計的欄位,最後輸出一份表格,格式如下 :
月份 商品名稱 銷售金額合計加總 202001 伺服器 210000 202001 電腦 50000 … … …
需要檔案
- 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 表格處理
設定
- 檔案路徑為 : %row-filepath%
- 表頭列 : 使用 DETECT 自動生成並修正
- 資料起點 : 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。