From d5c75e864470e83b3d2a9b45a4a5d1bfd81521da Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Mon, 29 Mar 2021 19:27:06 +0700 Subject: [PATCH] Updated the custom configs for mapper --- examples/excel2json/README.md | 17 +++++++-- examples/excel2json/data/mapper.json | 6 +++- examples/excel2json/index.js | 53 ++++++++++++++++++---------- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/examples/excel2json/README.md b/examples/excel2json/README.md index 4f54107..e64bb72 100644 --- a/examples/excel2json/README.md +++ b/examples/excel2json/README.md @@ -1,17 +1,22 @@ -# Excel 2 Json +# excel2json + - Read file excel to json -- Custom mapping with custom columns +- Custom mapping with custom columns and configs # Build + ```shell bash build ``` + OR + ```shell make build run ``` # Example + ```shell docker run -v /my/path:/app/data --rm -it cubetiq/node-excel2json ``` @@ -21,6 +26,7 @@ docker run -v /home/sombochea/excel2json:/app/data -e APP_NAME="EXCEL 2 JSON" -e ``` # Mapper Config + ```json { "data": [ @@ -33,11 +39,16 @@ docker run -v /home/sombochea/excel2json:/app/data -e APP_NAME="EXCEL 2 JSON" -e "label": "Age" } ], - "configs": {} + "configs": { + "outputPath": "./data/outputs/exported", + "outputName": "my_exported_data", + "sheetName": "Sheet1" + } } ``` # Environment + ```env APP_NAME=custom app name INPUT_FILE=./data/mydata.xlsx diff --git a/examples/excel2json/data/mapper.json b/examples/excel2json/data/mapper.json index 1995182..3e1d9e2 100644 --- a/examples/excel2json/data/mapper.json +++ b/examples/excel2json/data/mapper.json @@ -9,5 +9,9 @@ "label": "Age" } ], - "configs": {} + "configs": { + "outputPath": "./data/outputs/exported", + "outputName": "my_exported_data", + "sheetName": "Sheet1" + } } diff --git a/examples/excel2json/index.js b/examples/excel2json/index.js index 26a72a2..37aa51e 100644 --- a/examples/excel2json/index.js +++ b/examples/excel2json/index.js @@ -8,29 +8,37 @@ console.log("App Name =>", NAME); const INPUT_FILE = process.env.INPUT_FILE || "./data/people.xlsx"; const OUTPUT_PATH = process.env.OUTPUT_PATH || "./data/outputs"; const MAPPER_FILE = process.env.MAPPER_FILE || "./data/mapper.json"; -const SHEET_NAME = process.env.SHEET_NAME || "Sheet1" -const ENCODING = process.env.ENCODING || "utf-8" +const SHEET_NAME = process.env.SHEET_NAME || "Sheet1"; +const ENCODING = process.env.ENCODING || "utf-8"; // get mapper in string -const mapperString = fs.readFileSync( - MAPPER_FILE, - { encoding: ENCODING }, - (err) => { - if (err) throw err; +var mapperString = undefined; +try { + mapperString = fs.readFileSync(MAPPER_FILE, { encoding: ENCODING }, (err) => { + if (err) { + console.error(err); + } console.log("Load file suceed =>", MAPPER_FILE); - } -); + }); +} catch (err) { + console.error("read file error", err) +} // convert mapper from string to json object -const mapperJson = JSON.parse(mapperString); -const columsData = mapperJson.data; +const mapperJson = mapperString ? JSON.parse(mapperString) : {}; +const configs = mapperJson.configs || {}; +const columsData = mapperJson.data || undefined; // read workbook from excel file -const wb = XLSX.readFile(INPUT_FILE); -const xlData = XLSX.utils.sheet_to_json(wb.Sheets[SHEET_NAME]); +const wb = XLSX.readFile(configs.inputFile || INPUT_FILE); +const xlData = XLSX.utils.sheet_to_json(wb.Sheets[configs.sheetName || SHEET_NAME]); // mapping the data from read excel file const data = xlData.map((row) => { + if (columsData == undefined || !columsData) { + return row; + } + var _r = {}; columsData.map((col) => { @@ -41,13 +49,20 @@ const data = xlData.map((row) => { }); console.log("Data read from excel and mapped\n", data); +// parse a new path +const outputPath = configs.outputPath || OUTPUT_PATH + // check directory and create it if not exist -if (!fs.existsSync(OUTPUT_PATH)) { - fs.mkdirSync(OUTPUT_PATH); +if (!fs.existsSync(outputPath)) { + fs.mkdirSync(outputPath, { recursive: true }); } // write to file -fs.writeFile(`${OUTPUT_PATH}/people_${new Date().getTime()}.json`, JSON.stringify(data), (err) => { - if (err) throw err; - console.log("Write succeed!"); -}); +fs.writeFileSync( + `${outputPath}/${configs.outputName || 'exported'}_${new Date().getTime()}.json`, + JSON.stringify(data), + (err) => { + if (err) throw err; + console.log("Write succeed!"); + } +);