UNPKG

@tasolutions/express-core

Version:
88 lines (72 loc) 3.06 kB
'use strict'; 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; }