From af96b1c3056610e8bc3e4304f71055a87a94564c Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Mon, 29 Mar 2021 19:47:35 +0700 Subject: [PATCH] Add function for excel2json for exported with file and data json object --- examples/excel2json/excel2json.js | 100 ++++++++++++++++++++++++++++++ examples/excel2json/index.js | 72 ++------------------- examples/excel2json/package.json | 1 + 3 files changed, 107 insertions(+), 66 deletions(-) create mode 100644 examples/excel2json/excel2json.js diff --git a/examples/excel2json/excel2json.js b/examples/excel2json/excel2json.js new file mode 100644 index 0000000..de09116 --- /dev/null +++ b/examples/excel2json/excel2json.js @@ -0,0 +1,100 @@ +const XLSX = require("xlsx"); +const fs = require("fs"); + +// do export for excel to json output or data json object +function _internalExport() { + const NAME = process.env.APP_NAME || "excel2json"; + console.log("APP NAME =>", NAME, "\n"); + + // load from env + 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"; + + // get mapper in string + 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 = mapperString ? JSON.parse(mapperString) : {}; + const configs = mapperJson.configs || {}; + const columsData = mapperJson.data || undefined; + + // read workbook from excel file + 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) => { + _r[col.label] = row[col.dataIndex]; + }); + + return _r; + }); + + // parse a new path + const outputPath = configs.outputPath || OUTPUT_PATH; + + // check directory and create it if not exist + if (!fs.existsSync(outputPath)) { + fs.mkdirSync(outputPath, { recursive: true }); + } + + // able to save to output or not (default is true) + const saveToOutput = configs.saveToOutput || true; + + if (saveToOutput) { + // json data output + const jsonStringData = JSON.stringify(data); + + try { + // write to file + fs.writeFileSync( + `${outputPath}/${ + configs.outputName || "exported" + }_${new Date().getTime()}.json`, + jsonStringData, + (err) => { + if (err) throw err; + console.log("Write succeed!"); + } + ); + } catch (err) {} + } + + return data; +} + +/** + * excel2json + * Allow to export data from excel to json object or output of json. + * + * @returns JSON Object of result + */ +module.exports = excel2json = () => { + return _internalExport() +} \ No newline at end of file diff --git a/examples/excel2json/index.js b/examples/excel2json/index.js index 37aa51e..4bca17e 100644 --- a/examples/excel2json/index.js +++ b/examples/excel2json/index.js @@ -1,68 +1,8 @@ -const XLSX = require("xlsx"); -const fs = require("fs"); +// import excel2json module +const excel2json = require("./excel2json"); -const NAME = process.env.APP_NAME || "excel2json"; -console.log("App Name =>", NAME); +// called function export excel2json +const exported = excel2json(); -// load from env -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"; - -// get mapper in string -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 = mapperString ? JSON.parse(mapperString) : {}; -const configs = mapperJson.configs || {}; -const columsData = mapperJson.data || undefined; - -// read workbook from excel file -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) => { - _r[col.label] = row[col.dataIndex]; - }); - - return _r; -}); -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(outputPath)) { - fs.mkdirSync(outputPath, { recursive: true }); -} - -// write to file -fs.writeFileSync( - `${outputPath}/${configs.outputName || 'exported'}_${new Date().getTime()}.json`, - JSON.stringify(data), - (err) => { - if (err) throw err; - console.log("Write succeed!"); - } -); +// output data from exported +console.log("Output =>\n", exported); diff --git a/examples/excel2json/package.json b/examples/excel2json/package.json index 5c8dd88..bfc11ea 100644 --- a/examples/excel2json/package.json +++ b/examples/excel2json/package.json @@ -4,6 +4,7 @@ "description": "", "main": "index.js", "scripts": { + "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Sambo Chea ",