const fs = require('fs'); const path = require('path'); const XLSX = require('xlsx'); const {MongoConf} = require('./config'); const MongoClient = require('mongodb').MongoClient; const assert = require('assert'); const dbIns = MongoConf['R1']; const connStr = `mongodb://${dbIns.host}:${dbIns.port}` const connOpt = { auth : { user: dbIns.username, password: dbIns.password, }, authSource: dbIns.dbname, authMechanism: "SCRAM-SHA-1", useNewUrlParser: true } const dataPath = "../assets/scripts/data"; const dataPrefix = "allstar_"; /** * excel表转换为json对象 * @param {String} filename 文件名 */ const getSheet = function (filename) { let filePath = path.join(__dirname, "/excel", filename); // let buf = fs.readFile(filePath); let workbook = XLSX.readFileSync(filePath) let sheets = workbook.SheetNames; let sheetsObj = {}; sheets.forEach(n => { let ws = workbook.Sheets[n]; let def = XLSX.utils.sheet_to_json(ws, {range: 0, header: 1}); let typeMap = {}; let typeArr = def[0]; let keyArr = def[2]; keyArr.forEach((item, index) => { typeMap[item] = typeArr[index] }) let res = XLSX.utils.sheet_to_json(ws, {range: 2}) res.forEach(item => { for(let i in item) { item[i] = formatType(item[i], typeMap[i]) } }) sheetsObj[n] = res }) return sheetsObj; // console.log(XLSX.utils.sheet_to_json(ws)); // console.log(workbook.SheetNames); } /** * 写入json内容到客户端assets目录 * @param {String} filename 文件名 * @param {Object} content json内容 */ const writeToAssets = function (filename, content) { let writeFileName = filename.replace(/\.xlsx|\.xls/, '.js').replace(dataPrefix, ""); let writePath = path.join(__dirname, dataPath, writeFileName); fs.writeFile(writePath, 'module.exports=' + JSON.stringify(content)) console.log(JSON.stringify(content, null, 2)); } const formatType = function(target, type) { let _type = type.toLowerCase() switch (_type) { case 'integer': target = parseInt(target, 10); break; case 'double': target = parseFloat(target) break; case 'string': target = target.toString() break; case 'object': target = JSON.parse(target) break; default: break; } return target } const init = function () { fs.readdir("./excel", (err, file) => { file.forEach(n => { if(n.match(/\~\$/)) { return } let ws = getSheet(n); let sheetName = n.replace(/\.xlsx|\.xls/, ""); let target; if(ws.length > 0) { //单个表 // ws.forEach(n => { // if(typeof n['id'] != undefined) { // n['_id'] = n['id'] // } // }) target = ws } else { //多个表合拼成一个Array let _array = [] for(let i in ws) { _array = _array.concat(ws[i]) } target = _array } MongoClient.connect(connStr, connOpt, (err, client) => { var db = client.db(dbIns.dbname); var collection = db.collection(sheetName) collection.drop(null, () => { collection.insert(target, () => { client.close() }) }) }); //把生成的js写入客户端assets目录 let wsKeys = Object.keys(ws) if(wsKeys.length == 1) { writeToAssets(n, ws[wsKeys[0]]); } else { writeToAssets(n, ws); } }) // process.exit() }) } init()