@tasolutions/express-core
Version:
All libs for express
88 lines (72 loc) • 3.06 kB
JavaScript
;
const _ = require('lodash');
const path = require('path');
const { numberToLetters } = require('./calculate');
const excelToJson = require('convert-excel-to-json');
const mongoose = require('mongoose');
module.exports = {
importExcelToMongo: async (model, fileData, sheetKey, headerRows = 1, isImport = false) => {
// check file
if (!fileData || !fileData.file) throw { message: 'Please upload an excel file!' };
if (!fileData.file.name || !fileData.file.name.match(/\.(xlsx|xls|csv)$/i))
throw { message: 'Format not correct' };
if (!sheetKey) throw { message: 'sheetKey is required!' };
// validate file type
await fileData.file.mv('./uploads/' + fileData.file.name);
let paths = path.join('./uploads/', fileData.file.name);
let keySchema = [];
if (isMongoModel(model)) {
keySchema = Object.keys(model.schema.tree);
keySchema = _.without(keySchema, 'id', '_id', '__v', 'updatedAt', 'createdAt');
} else {
keySchema = model;
}
let columnToKey = {};
for (let i = 0; i < keySchema.length; i++) {
columnToKey[numberToLetters(i)] = keySchema[i];
}
const options = {
sourceFile: paths,
header: {
rows: headerRows
},
sheets: [sheetKey],
columnToKey: columnToKey
};
console.log('[Import] options', options);
const jsonData = excelToJson(options);
try {
console.log('[Import] jsonData====Start', jsonData[sheetKey].length);
if (isImport == 'true' || isImport == true) {
console.log('----------Start-Import----------');
await model.insertMany(jsonData[sheetKey]);
console.log('-----------End-Import-----------');
}
console.log('[Import] jsonData======End', jsonData[sheetKey].length);
} catch (e) {
console.log('[Import] e', e)
}
return jsonData[sheetKey];
},
getValueFromExcel: async (fileData, sheetKey, range) => {
// check file
if (!fileData || !fileData.file) throw { message: 'Please upload an excel file!' };
if (!fileData.file.name || !fileData.file.name.match(/\.(xlsx|xls|csv)$/i))
throw { message: 'Format not correct' };
if (!sheetKey) throw { message: 'sheetKey is required!' };
if (!range) throw { message: 'range is required!' };
// validate file type
await fileData.file.mv('./uploads/' + fileData.file.name);
let paths = path.join('./uploads/', fileData.file.name);
const options = {
sourceFile: paths,
sheets: [sheetKey],
range: range
};
const jsonData = excelToJson(options);
return jsonData[sheetKey];
}
};
function isMongoModel(yourObject) {
return yourObject.hasOwnProperty('schema') && yourObject.schema instanceof mongoose.Schema;
}