Add cli support and updated functions
This commit is contained in:
parent
0af211c3c6
commit
f997501489
18
README.md
18
README.md
@ -5,6 +5,24 @@
|
|||||||
|
|
||||||
- Read file excel to json
|
- Read file excel to json
|
||||||
- Custom mapping with custom columns and configs
|
- Custom mapping with custom columns and configs
|
||||||
|
- Custom props
|
||||||
|
|
||||||
|
# Install
|
||||||
|
```shell
|
||||||
|
npm i excel2json-xlsx
|
||||||
|
```
|
||||||
|
OR
|
||||||
|
```shell
|
||||||
|
yarn i excel2json-xlsx
|
||||||
|
```
|
||||||
|
OR Global Install
|
||||||
|
```shell
|
||||||
|
yarn add global excel2json-xlsx
|
||||||
|
```
|
||||||
|
Usage
|
||||||
|
```shell
|
||||||
|
excel2json-xlsx -i people.xlsx -o exported.json
|
||||||
|
```
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
|
|
||||||
|
44
bin/cli.js
Normal file
44
bin/cli.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const yargs = require("yargs");
|
||||||
|
const excel2json = require("./../excel2json");
|
||||||
|
|
||||||
|
const options = yargs
|
||||||
|
.usage("Usage: -i <input> -o <output> -m <mapper>")
|
||||||
|
.option("i", {
|
||||||
|
alias: "input",
|
||||||
|
describe: "Input File Excel (Required .xlsx)",
|
||||||
|
type: "string",
|
||||||
|
demandOption: true,
|
||||||
|
})
|
||||||
|
.option("o", {
|
||||||
|
alias: "output",
|
||||||
|
describe: "Output File to JSON",
|
||||||
|
type: "string",
|
||||||
|
demandOption: false,
|
||||||
|
})
|
||||||
|
.option("m", {
|
||||||
|
alias: "mapper",
|
||||||
|
describe: "Mapper File in JSON",
|
||||||
|
type: "string",
|
||||||
|
demandOption: false,
|
||||||
|
})
|
||||||
|
.option("s", {
|
||||||
|
alias: "sheet",
|
||||||
|
describe: "Sheet Name in workbook",
|
||||||
|
type: "string",
|
||||||
|
demandOption: false,
|
||||||
|
})
|
||||||
|
.argv;
|
||||||
|
|
||||||
|
const inputFile = options.input;
|
||||||
|
const outputFile = options.output;
|
||||||
|
const mapperFile = options.mapper;
|
||||||
|
const sheetName = options.sheet;
|
||||||
|
|
||||||
|
const exported = excel2json({
|
||||||
|
inputFile: inputFile,
|
||||||
|
mapperFile: mapperFile,
|
||||||
|
outputFile: outputFile,
|
||||||
|
sheetName: sheetName,
|
||||||
|
});
|
1
excel2json.d.ts
vendored
1
excel2json.d.ts
vendored
@ -2,6 +2,7 @@ interface Excel2JsonProps {
|
|||||||
mappings?: Array<any>;
|
mappings?: Array<any>;
|
||||||
saveToOutput?: boolean;
|
saveToOutput?: boolean;
|
||||||
outputPath?: string;
|
outputPath?: string;
|
||||||
|
outputFile?: string;
|
||||||
outputName?: string;
|
outputName?: string;
|
||||||
sheetName?: string;
|
sheetName?: string;
|
||||||
inputFile?: string;
|
inputFile?: string;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
const XLSX = require("xlsx");
|
const XLSX = require("xlsx");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
const { splitFilepath } = require("./util");
|
||||||
|
|
||||||
// do export for excel to json output or data json object
|
// do export for excel to json output or data json object
|
||||||
function _internalExport(props = {}) {
|
function _internalExport(props = {}) {
|
||||||
const NAME = process.env.APP_NAME || "excel2json";
|
const NAME = process.env.APP_NAME || "excel2json";
|
||||||
console.log("APP NAME =>", NAME, "\n");
|
console.log("Name =>", NAME, "\n");
|
||||||
|
|
||||||
// load from env
|
// load from env
|
||||||
const INPUT_FILE =
|
const INPUT_FILE =
|
||||||
@ -36,7 +37,6 @@ function _internalExport(props = {}) {
|
|||||||
// convert mapper from string to json object
|
// convert mapper from string to json object
|
||||||
const mapperJson = mapperString ? JSON.parse(mapperString) : {};
|
const mapperJson = mapperString ? JSON.parse(mapperString) : {};
|
||||||
const configs = { ...mapperJson.configs, ...props };
|
const configs = { ...mapperJson.configs, ...props };
|
||||||
console.log(configs);
|
|
||||||
const columsData = props.mappings || mapperJson.data || undefined;
|
const columsData = props.mappings || mapperJson.data || undefined;
|
||||||
|
|
||||||
// read workbook from excel file
|
// read workbook from excel file
|
||||||
@ -61,31 +61,47 @@ function _internalExport(props = {}) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// able to save to output or not (default is true)
|
// able to save to output or not (default is true)
|
||||||
if (configs.saveToOutputput) {
|
if (configs.saveToOutputput || configs.outputFile) {
|
||||||
|
var outputPath = undefined;
|
||||||
|
const filePath = splitFilepath(configs.outputFile);
|
||||||
|
|
||||||
|
// validate path and filename
|
||||||
|
if (filePath && filePath.path) {
|
||||||
|
outputPath = filePath.path;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filePath.path) {
|
||||||
// parse a new path
|
// parse a new path
|
||||||
const outputPath = configs.outputPath || OUTPUT_PATH;
|
outputPath = outputPath || configs.outputPath || OUTPUT_PATH;
|
||||||
|
|
||||||
// check directory and create it if not exist
|
// check directory and create it if not exist
|
||||||
if (!fs.existsSync(outputPath)) {
|
if (!fs.existsSync(outputPath)) {
|
||||||
fs.mkdirSync(outputPath, { recursive: true });
|
fs.mkdirSync(outputPath, { recursive: true });
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// json data output
|
// json data output
|
||||||
const jsonStringData = JSON.stringify(data);
|
const jsonStringData = JSON.stringify(data);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// write to file
|
var outFile = undefined;
|
||||||
fs.writeFileSync(
|
if (configs.outputFile) {
|
||||||
`${outputPath}/${
|
outFile = configs.outputFile;
|
||||||
|
} else {
|
||||||
|
outFile = `${outputPath}/${
|
||||||
configs.outputName || "exported"
|
configs.outputName || "exported"
|
||||||
}_${new Date().getTime()}.json`,
|
}_${new Date().getTime()}.json`;
|
||||||
jsonStringData,
|
}
|
||||||
(err) => {
|
|
||||||
if (err) throw err;
|
// write to file
|
||||||
console.log("Write succeed!");
|
fs.writeFileSync(outFile, jsonStringData, (err) => {
|
||||||
|
if (err) throw err;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Exported excel to json to output =>", outFile);
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
}
|
}
|
||||||
);
|
|
||||||
} catch (err) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
16
package.json
16
package.json
@ -1,6 +1,17 @@
|
|||||||
{
|
{
|
||||||
"name": "excel2json-xlsx",
|
"name": "excel2json-xlsx",
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
|
"keywords": [
|
||||||
|
"excel",
|
||||||
|
"json",
|
||||||
|
"excel2json",
|
||||||
|
"parser",
|
||||||
|
"xlsx"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"bin": "bin/cli.js",
|
||||||
"description": "Excel to JSON, able to export JSON from Excel (xlsx)",
|
"description": "Excel to JSON, able to export JSON from Excel (xlsx)",
|
||||||
"repository": {
|
"repository": {
|
||||||
"url": "https://github.com/CUBETIQ/excel2json.git"
|
"url": "https://github.com/CUBETIQ/excel2json.git"
|
||||||
@ -13,6 +24,7 @@
|
|||||||
"author": "Sambo Chea <sombochea@cubetiqs.com>",
|
"author": "Sambo Chea <sombochea@cubetiqs.com>",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"xlsx": "^0.16.9"
|
"xlsx": "^0.16.9",
|
||||||
|
"yargs": "^16.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
util.js
Normal file
15
util.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* Split Filepath to Path and Filename
|
||||||
|
*
|
||||||
|
* @param {String} filePath
|
||||||
|
* @returns Object of JSON
|
||||||
|
*/
|
||||||
|
module.exports.splitFilepath = function splitFilepath(filePath) {
|
||||||
|
const filename = filePath.replace(/^.*[\\\/]/, "");
|
||||||
|
const path = filePath.replace("/" + filename, "");
|
||||||
|
|
||||||
|
return {
|
||||||
|
path: path == filename ? undefined : path,
|
||||||
|
filename,
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user