node.js解析excel大文件的问题

JavaScript016

node.js解析excel大文件的问题,第1张

问题:使用 koa-bodyparser 可以解析post提交的问题,但是发现获取不到formdata上传的文件。

后经查资料,改用 koa-body 解决:

constkoaBody = require('koa-body')app.use(koaBody({ multipart:true, formidable: { maxFileSize:200*1024*1024//设置上传文件大小最大限制,默认2M} }))

然后就可以在 ctx.request.files 里面获取到上传的 文件信息了。ctx.request.files 为一个对象,里面包含一个 file 字段(为你前端上传定义的值),值为文件信息,主要是文件name和path,path为临时存储路径。

二、解析xlsx文件信息

主要使用模块 node-xlsx :npm i xlsx --save

1、加载模块

使用模块:fs--主要用于写入文件;node-xlsx主要用于转换xlsx数据和读取xlsx的文件数据;

constfs = require('fs')constxlsx = require('node-xlsx')//读写xlsx的插件

2、读取功能

读取功能相对简单,直接使用模块的 prase(路径) 方法就能读取

let list = xlsx.parse("./doc/hello.xlsx")

返回结果,name:表名,data:二维数组。(由于Excel以表格的形式表示,因此表格的数据都是通过二维数组进行接收。)

需要注意的是:data里的第一行数组为表头的信息

[ { name:'firstSheet', data: [ [Array], [Array] ] }, { name:'secondSheet', data: [ [Array], [Array] ] } ]

3、写入功能

写入功能,对应的写入数据与上面读取功能的返回格式需要一致,以数组的形式,name:表名,data:二维数组(Excel每行每列的数据)

如下面代码,生成一个Excel文件,分别两张表,表名分别是firstSheet,secondSheet

let xlsxObj =[ { name:'firstSheet', data: [ [1,2,3], [4,5,6] ], }, { name:'secondSheet', data: [ [7,8,9], [10,1,12] ], } ]

生成Excel文件:

fs.writeFileSync(路径,Buffer数据)

xlsx.build(xlsxObj) 会将数组转换为Buffer数据

执行下面代码就会生成对应的Excel文件

fs.writeFileSync('./doc/hello.xlsx', xlsx.build(xlsxObj),"binary")

https://www.cnblogs.com/liuxianan/p/js-excel.html

由 SheetJS 出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。

dist目录下有很多个JS文件,一般情况下用xlsx.core.min.js就够了,xlsx.full.min.js则是包含了所有功能模块。

JavaScript读取和导出excel示例(基于js-xlsx)

http://demo.haoji.me/2017/02/08-js-xlsx/

js怎么获取 excel的数据

在一个html页面生成的时候,js就已经把dom树创建好了

只要这棵树上有的数据,我们都可以通过js来获取使用

那么这个问题就变成js如何去查询dom树的节点了

js内置了以下几个查询节点的方法

document.getElementById("id")//通过id来获取一个dom元素

document.getElementsByName("name")//通过name属性来获取一个集合

document.getElementsByTagName("tag")//通过标签来获取一个集合

如果要查找的元素本身有id,通过第一个方法可以直接获取,当我们得到了这个dom节点的时候就可以输出他的一系列数据了

举个栗子

var dom = document.getElementById("id")

//如果是图片

alert(dom.src)

//如果该dom有class

alert(dom.className)

//如果该dom有value

alert(dom.value)

//如果该dom有文本

alert(dom.innerHTML)

//输出dom的style

alert(dom.style.width)

//等等

当dom没有id的时候,我们就要依靠一些条件去找到我们想要的dom了

//寻找所有class为bold的div

var c = document.getElementsByTagName("div"), len = c.length, r = []

for(var i=0i<leni++){

if(c[i].className == 'bold'){

r.push(c[i])

}

}

//当得到了这些dom节点后,就可以用上面提到的方法继续访问每个dom的数据啦