NodeJs之EXCEL文件导入导出MongoDB数据库数据

一,介绍与需求

1.1,介绍

(1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件。

(2),excel-export : 基于Node.js将数据生成导出excel文件,生成文件格式为xlsx(可以指定),可以设置单元格宽度,API容易上手,无法生成worksheet字表,比较单一,基本功能可以基本满足;

1.2,需求

快速插入数据导数据库,备份数据等

二,导入导出

2.1,数据导入

第一步:安装node-xlsx

 cnpm install node-xlsx --save

第二步:引入node-xlsx

 //引入node-xlsx解析excel模块
var node_xlsx = require('node-xlsx');

第三步:解析导入的excel

  let obj = node_xlsx.parse(excelConfig.excel_Dir);// 支持的excel文件类有.xlsx .xls .xlsm .xltx .xltm .xlsb .xlam等
let excelObj = obj[0].data;//取得第一个excel表的数据
let insertData = [];//存放数据 //循环遍历表每一行的数据
for(var i=1;i<excelObj.length;i++){
var rdata = excelObj[i];
var CityObj =new Object();
// ["id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"]
for(var j=0;j<rdata.length;j++){
CityObj[excelConfig.CityArray[j]]=rdata[j]
}
insertData.push(CityObj)
}

第四步:删除已解析的excel文件

 var fs = require('fs');
... //导入解析成功后 将文件删除
fs.unlink(excelConfig.excel_Dir,function (err) {
if(err) throw err;
console.log("删除文件"+excelConfig.excel_Dir+"成功")
}) ...

第五步:存入MongoDB数据库

 var MongoDbAction = require('../services/db_mongodb.js');

 ...

  //将每一行的数据存进MongoDB数据库中
MongoDbAction.insertMany(excelConfig.TableName, insertData, function (err, result) {
if (!err) {
res.status(200).json({
httpCode: 200,
message: '导入成功',
data:{
insertTotal:result&&result.n?result.n:result.length
},
returnValue: 1
});
} else {
res.status(200).json({
httpCode: 200,
message: '导入失败',
data: err,
returnValue: 0
});
}
}); ...

第六步:抛出接口

 var path = require("path");
var fs = require('fs');
var express = require("express"); ... //先包含进来
var nodeImportExcel = require('../services/node_import_excel.js'); var router = express.Router(); ... router.post('/tolead/excel', upload.single('file'), function (req, res, next) {
var fileName = req.file.filename;
let splitFileName = fileName.split('.');
let ExcelType = splitFileName[splitFileName.length-1];// 支持的excel文件类有.xlsx .xls .xlsm .xltx .xltm .xlsb .xlam等
if(ExcelType!='xlsx'&&ExcelType!='xls'&&ExcelType!='xlsm'&&ExcelType!='xltx'&&ExcelType!='xltm'&&ExcelType!='xlsb'&&ExcelType!='xlam'){
res.status(200).json({
httpCode: 200,
message: '文件类型错误,请上传Excel文件!',
data: {},
returnValue: 0
});
return;
} ... //定义实体类数组
let TableName = 'Test'
let CityArray = new Array('id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn');
let importConfig = {
excel_Dir,
CityArray,
TableName
} .... nodeImportExcel.parseExcel(importConfig,res) .... }); module.exports = router;

第七步:调用效果

(1),成功

(2),失败 类型不对

2.2,数据导出

第一步:安装excel-export

 cnpm install excel-export --save

第二步:引入excel-export

 var nodeExcel = require("excel-export");//首先,引入excel模块:

第三步:实现导出接口抛出

 var nodeExcel = require("excel-export");//首先,引入excel模块:
var express = require('express');
var router = express.Router();
var moment = require('moment');//时间格式化
// import moment from 'moment';
//先包含进来
var MongoDbAction = require('../services/db_mongodb.js'); router.get('/download/excel', function (req, res) {
var conf = {};//创建一个写入格式map,其中cols(表头),rows(每一行的数据);
var cols = ['城市编码', '所属省份', '所属市', '城市名称', '城市英文名称'];//手动创建表头中的内容
conf.cols = [];//在conf中添加cols for (var i = 0; i < cols.length; i++) {
var tits = {};//创建表头数据所对应的类型,其中包括 caption内容 type类型
tits.caption = cols[i];//添加内容
tits.type = 'string';//添加对应类型,这类型对应数据库中的类型,入number,data但一般导出的都是转换为string类型的
conf.cols.push(tits);//将每一个表头加入cols中
}
let fields = {
id: '',
provinceZh: '',
leaderZh: '',
cityZh: '',
cityEn: ''
}
MongoDbAction.getFieldsByConditions('AllCity', {}, fields, function (err, data) {//根据需求查询想要的字段
if (err) {
//执行出错
} else {
var tows = ['id', 'provinceZh', 'leaderZh', 'cityZh', 'cityEn'];//创建一个和表头对应且名称与数据库字段对应数据,便于循环取出数据
var datas = [];//用于承载数据库中的数据
let towsLen = tows.length
let dataLen = data.length
for (var i = 0; i < dataLen; i++) {//循环数据库得到的数据,因为取出的数据格式为
//[{"id" : "101010100","provinceZh" : "北京","leaderZh" : "北京","cityZh" : "北京","cityEn" : "beijing"},{…………},{…………}]
let row = [];//用来装载每次得到的数据
for (let j = 0; j < towsLen; j++) {//内循环取出每个
row.push(data[i][tows[j]].toString());//row.push((data[i].tows[j]).toString());两种形式都是相同的
}
datas.push(row);//将每一个{ }中的数据添加到承载中
}
conf.rows = datas;//将所有行加入rows中
var result = nodeExcel.execute(conf);//将所有数据写入nodeExcel中
res.setHeader('Content-Type', 'application/vnd.openxmlformats');//设置响应头
//设置下载文件命名 支持的excel文件类有.xlsx .xls .xlsm .xltx .xltm .xlsb .xlam等
res.setHeader("Content-Disposition", "attachment; filename=city"+moment(new Date().getTime()).format('YYYYMMDDhhmmss')+".xlsx");
res.end(result, 'binary');//将文件内容传入
}
});
});
module.exports = router;

第四步:前端调用

  downloadExcelOper() {
var url = "http://localhost:8000/api/v1/yingqi/download/excel";
window.location = url;//这里不能使用get方法跳转,否则下载不成功 }

第五步:导出后的效果

NodeJs之EXCEL文件导入导出MongoDB数据库数据的更多相关文章

  1. 用NODEJS处理EXCEL文件导入导出,文件上传

    參考文章 http://librajt.github.io/2013/08/04/handle-excel-file-with-nodejs/ 对照了 ExcelJS ,https://github. ...

  2. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  3. Excel文件导入导出(基于Nodejs、exceljs)

    Excel导入.导出是大多数项目的管理后台必备功能.几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法. 大凡厉害的技术的文档咋一看都想字 ...

  4. 十万级百万级数据量的Excel文件导入并写入数据库

    一.需求分析 最近接到一个需求,导入十万级,甚至可能百万数据量的记录了车辆黑名单的Excel文件,借此机会分析下编码过程; 首先将这个需求拆解,发现有三个比较复杂的问题: 问题一:Excel文件导入后 ...

  5. Excel文件导入导出

    /**     * 导入Excel文件数据     *      * @param file 将要导入的Excel文件     * @param fileCheckKeyWord 用于判断导入文件是否 ...

  6. postman 测试Excel文件导入导出功能

    1.导入的测试方法 选择form-data,key值填写方法对应的参数,选择File,Value处上传文件即可. 2. 导出的测试方法 在导出文件的时候,响应结果是乱码,然后在测试的时候选择下载,下载 ...

  7. 批量将制定文件夹下的全部Excel文件导入微软SQL数据库

    以下代码将c:\cs\文件夹下的全部Excle中数据导入到SQL数据库 declare @query vARCHAR(1000) declare @max1 int declare @count1 i ...

  8. C# excel文件导入导出

    欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...

  9. Excel文件导入SQL Server数据库

    Excel表格的使用可谓是非常广泛,博主也简单百度了一下Excel的发展. 发展历程: 1982年 Microsoft推出了它的第一款电子制表软件-Multiplan,并在CP/M系统上大 Excel ...

随机推荐

  1. python接口自动化(十一)--发送post【data】(详解)

    简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...

  2. springboot~Compiler时开启插件的注解功能

    对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等 ...

  3. LindAgile.SchedulingTask~设计一个不错的任务调度组件

    回到目录 SchedulingTask产生的原因 任务调试主要指定期执行某些任务代码,之前用过quartz,感觉有些重,使用时需要添加包包,配置管理项时,对于简单的项目用它就显得有些臃肿了,不如直接上 ...

  4. java编程行业微信群,无论新手老手欢迎加入,会一直更新

    纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群

  5. 如何在Linux服务器和windows系统之间上传与下载文件

    Do not let dream just be your dream. 背景:Linux服务器文件上传下载. XShell+Xftp安装包(解压即用)百度网盘链接:https://pan.baidu ...

  6. javascript排序算法-选择排序

    选择排序 概念:选择排序大致的思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推. 复杂度: O(n^2) 代码实现 var swap = function ...

  7. css 半圆效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. CSS中的一下小技巧1之CSS3三角形运用

    使用CSS3实现三角形: 在前端页面中有很多时候会遇到需要三角形图案的时候,以前不知道可以用CSS3实现三角形的时候,一般都是叫UI把三角形图案切出来. 后来知道原来可以用CSS3实现三角形,可是用过 ...

  9. SharpMap和NetTopologySuite叠加分析问题

    先附上实现的相交叠加分析的部分代码,然后请教个问题,希望能够得到解答. /// <summary> 执行相交叠加分析 </summary> private void Execu ...

  10. Java递归方法遍历二叉树的代码

    将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...