用NODEJS处理EXCEL文件导入导出,文件上传
參考文章
http://librajt.github.io/2013/08/04/handle-excel-file-with-nodejs/
对照了 ExcelJS ,https://github.com/guyonroche/exceljs#create-a-workbook
node-xlsx。https://github.com/mgcrea/node-xlsx
等 nodejs 等现有组件。决定使用node-xlsx。
node-xlsx 基于现有前端强大组件 js-xlsx。 https://github.com/SheetJS/js-xlsx
简单使用样例:
var express = require('express');
var router = express.Router();
var xlsx = require('node-xlsx');
var fs = require('fs');
/* GET import excel test. */
router.get('/importExcel', function(req, res, next) {
var filename='./public/test.xlsx';
console.error(filename);
// read from a file
var obj = xlsx.parse(filename);
console.log(JSON.stringify(obj));
res.send('import successfully!');
});
/* GET export excel test. */
router.get('/exportExcel', function(req, res, next) {
// write
var data = [[1,2,3],[true, false, null, 'sheetjs'],['foo','bar',new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']];
var buffer = xlsx.build([{name: "mySheetName", data: data}]);
fs.writeFileSync('b.xlsx', buffer, 'binary');
res.send('export successfully!');
});
补充:
文件上传操作能够选择下面两种
fs https://github.com/jprichardson/node-fs-extra
formidable https://github.com/felixge/node-formidable
上传參考代码1: http://www.tuicool.com/articles/F7JrMjj
https://cnodejs.org/topic/4f40a4dc0feaaa4424081758
上传文件 (记得创建上传文件的文件夹,比如public/upload )
routes/test.js
var formidable = require('formidable');
var http = require('http');
var util = require('util');
var express = require('express');
var fs = require('fs');
var path = require('path');
var favicon = require('serve-favicon');
var bodyParser = require('body-parser');
var app = express();
var server = http.createServer(app);
server.listen(3000);
app.set('views', '/views');
//app.use(favicon('/public/favicon.ico'));
app.use(bodyParser());
app.use('/public',express.static(path.join(__dirname, 'public')));
app.get('/',function(req, res) {
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
});
app.post('/upload', function(req,res) {
console.log(" ########## POST /upload ####### ");
var fileTypeError = false;
var target_path = __dirname+"/upload";
var form = new formidable.IncomingForm();
form.encoding = 'utf-8';
form.keepExtensions = true;
form.maxFieldsSize = 10 * 1024 * 1024;
form.uploadDir = target_path;
var fields = [];
var files = [];
form.on('field', function (field, value) {
fields.push([field, value]);
});
form.on('file', function (field, file) {
console.log('upload file: ' + file.name);
//推断文件类型是否是xlsx
if (file.type != 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
fileTypeError = true;
}
files.push([field, file]);
});
form.on('end', function () {
//遍历上传文件
var fileName = '';
var obj = '';
var folder_exists = fs.existsSync(target_path);
if (folder_exists) {
var dirList = fs.readdirSync(target_path);
dirList.forEach(function (item) {
if (!fs.statSync(target_path + '/' + item).isDirectory()) {
console.log('parse item:' + target_path + '/' + item);
fileName = target_path + '/' + item;
if (!fileTypeError) {
//解析excel
obj = xlsx.parse(fileName);
console.log(JSON.stringify(obj));
//insert into DB
//todo
res.send({"rtnCode": "0", "rtnInfo": "成功导入数据"});
} else {
res.send({"rtnCode": "1", "rtnInfo": "文件格式不对"});
}
//delete file
fs.unlinkSync(fileName);
}
});
}else{
res.send({"rtnCode": "1", "rtnInfo": "系统错误"});
}
});
form.on('error', function(err) {
res.send({"rtnCode": "1", "rtnInfo": "上传出错"});
});
form.on('aborted', function() {
res.send({"rtnCode": "1", "rtnInfo": "放弃上传"});
});
form.parse(req);
});
其它參考://返回上传进度
form.on('progress', function(bytesReceived, bytesExpected) {
var progress = {
type: 'progress',
bytesReceived: bytesReceived,
bytesExpected: bytesExpected
};
socket.broadcast(JSON.stringify(progress));
});
用NODEJS处理EXCEL文件导入导出,文件上传的更多相关文章
- NodeJs之EXCEL文件导入导出MongoDB数据库数据
NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- Laravel Excel 实现 Excel-CSV 文件导入导出功能
Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- C# excel文件导入导出
欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...
- CSV文件导入导出MySQL
使用SQLyog 工具导入文件数据到MySQL: Excel文件导入导出: 需要驱动:Microsoft Office 2007驱动 导入需要注意的问题:1.Excel里数值列,默认导入会变成浮点型. ...
- 以太坊钱包开发系列2 - 账号Keystore文件导入导出
以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...
- 将csv格式的数据文件导入/导出数据库+添加新的字段
最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一 ...
随机推荐
- 5.全局异常捕捉【从零开始学Spring Boot】
在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ...
- 倍福TwinCAT(贝福Beckhoff)基础教程2.0 TwinCAT常用快捷键
F5:运行程序 CTRL+F5:停止运行当前程序 F12:登出 F11:登录 CTRL+F7:强制写入数值 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.you ...
- Python3链接MySQL数据库
Python 2.x 上连接MySQL的库倒是不少的,其中比较著名就是MySQLdb(Django项目都使用它:我也在开发测试系统时也使用过),见:http://sourceforge.net/pro ...
- java清除所有微博短链接 Java问题通用解决代码
java实现微博短链接清除,利用正则,目前只支持微博短链接格式为"http://域名/字母或数字8位以内"的链接格式,现在基本通用 如果链接有多个,返回结果中会有多出的空格,请注意 ...
- MQTT--linux安装部署(CentOS)
OS环境:CentOS6.5 1.安装依赖 yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake ...
- 解密和解压浏览器上加密的js文件
F12 -> 进入Sources -> 找到任意一个加密的js文件,如图 点击最下方的 {} 即可解压
- 自定义Spring Shell
目录 概述 自定义内置命令 禁用内置命令 覆盖内置命令 自定义命令提示符 自定义命令行选项行为 自定义参数转换器 概述 官网:https://projects.spring.io/spring-she ...
- 使用新版MonoDevelop来进行unity工程调试
现在可以使用新版的MonoDeveloper来调试Unity工程了,新版的MonoDeveloper界面上漂亮很多,而且使用.调试上感觉也更舒服了.先上一张图: 安装方法如下: 登陆网址:http ...
- linux pptp 服务端安装并正常上网
linux 下 PPTP VPN 1.安装相关软件32位版:yum -y install ppprpm -Uvh http://poptop.sourceforge.net/yum/stable/rh ...
- Oracle 技术支持之现场优化的思维路径
性能调优是每个DBA职业生涯中都能遇到的任务 大到世界五百强的核心系统,小到乡镇企业的进销存,几乎都会有要调优的时候 面对形形色色的系统,林林总总的需求,调优的手段也是丰富多彩 定位问 ...