node 读取超大Excel 文件,提取数据
之前是用 node-xlsx 来处理excel文件,主要是读取数据或者根据数据生成excel文件。不过,node-xlsx 似乎无法处理超大的excel(100MB以上),例如:
var xlsx = require('node-xlsx');
var sheets = xlsx.parse('./test.xlsx'); //获取所有sheets
感谢这位老哥,找到了xlsx-extract 这个库,完美解决用流的方式读取excel
var powXLSX = require('xlsx-extract').XLSX;
new powXLSX().extract('./test.xlsx', { sheet_all: true }) // 读取文件所有sheet,默认只读取第一张sheet,参数配置如下
.on('sheet', function (sheet) {
console.log('sheet', sheet); // sheet is array [sheetname, sheetid, sheetnr]
})
.on('row', function (row) {
console.log('row', row); // row is a array of values or []
})
.on('cell', function (cell) {
// console.log('cell', cell); //cell is a value or null
})
.on('error', function (err) {
console.error('error', err);
})
.on('end', function (err) {
console.log('eof');
});
options = {
// sheet selection (provide one of the following)
sheet_name?: string; // select by sheet name
sheet_nr?: string; // default "1" - select by number of the sheet starting on 1
sheet_id?: string; // select by sheet id, e.g. "1"
sheet_rid?: string; // select by internal sheet rid, e.g. "rId1'
sheet_all?: boolean; // default false - select all sheets
// sax parser selection
parser?: string; // default "sax" - 'sax'|'expat'
// row selection
ignore_header?: number; // default 0 - the number of header lines to ignore
include_empty_rows?: boolean; // default false - include empty rows in the middle/at start
// how to output sheet, rows and cells
format?: string; // default array - convert to 'array'||'json'||'tsv'||'obj'
// tsv output options
tsv_float_comma?: boolean; // default false - use "," als decimal point for floats
tsv_delimiter?: string; // default '\t' - use specified character to field delimiter
tsv_endofline?: string; // default depending on your operating system (node os.EOL) e.g. '\n'
// cell value formats
raw_values?: boolean; // default false - do not apply cell formats (get values as string as in xlsx)
round_floats?: boolean; // default true - round float values as the cell format defines (values will be reported as parsed floats otherwise)
date1904?: boolean; // default false - use date 1904 conversion
ignore_timezone?: boolean; // default false - ignore timezone in date parsing
convert_values?: { // apply cell number formats or not (values will be reported as strings otherwise)
ints?: boolean; // rounds to int if number format is for int
floats?: boolean; // rounds floats according to float number format
dates?: boolean; // converts xlsx date to js date
bools?: boolean; // converts xlsx bool to js boolean
};
// xlsx structure options
workfolder?: string; // default 'xl' - the workbook subfolder in zip structure
}
具体的实现原理可以去github 探究 xlsx-extract
node 读取超大Excel 文件,提取数据的更多相关文章
- POI读取/写入Excel文件
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- 根据NPOI 读取一个excel 文件的多个Sheet
大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...
- Ajax获取 Json文件提取数据
摘自 Ajax获取 Json文件提取数据 1. json文件内容(item.json) [ { "name":"张国立", "sex":&q ...
- node.js之excel文件读取
金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉.node.js解析excel, 读取记录. 业务需求,从excel (xlsx, xls)导入数据. 备选 ...
- java 读取Excel文件并数据持久化方法Demo
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...
- 读取超大Excel(39万行数据)
有个学长需要处理Excel数据,Excel数据共有39W,将数据读取后处理并导出数据.最开始尝试了 NPOI ,发现NPOI 并不能完成该项任务,随后尝试引用的com组件:Microsoft.Offi ...
- java - 读取,导出 excel文件数据
首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...
- [译]使用Pandas读取大型Excel文件
上周我参加了dataisbeautiful subreddit上的Dataviz Battle,我们不得不从TSA声明数据集创建可视化.我喜欢这种比赛,因为大多数时候你最终都会学习很多有用的东西. 这 ...
- node 读取多个文件、合并多个文件、读写多个文件
一.读取文件 1.找文件中匹配的内容 let fs = require('fs') let content = fs.readFileSync('/Users/**/desktop/Test.txt' ...
随机推荐
- JavaScript的闭包特性如何给循环中的对象添加事件(一)
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- Server2016 IIS安装配置
- Codeforces 939A题,B题(水题)
题目链接:http://codeforces.com/problemset/problem/939/A A题 A. Love Triangle time limit per test 1 second ...
- vs扩展和更新插件的开发
一.调试 以 MinimalisticView.vsix (https://github.com/poma/MinimalisticView) 为例. 正如 | Marketplace 上介绍的,这个 ...
- 如何在linux CentOS 上安装chrome 谷歌浏览器?
获得linux命令的root权限:http://blog.csdn.net/mddy2001/article/details/76521101. 更改密码在终端中输入:sudo passwd root ...
- ConstraintLayout 用法
当前描述是基于constraint-layout:1.1.2. 一.前言 在以前,android是使用布局如LinearLayout .RelativeLayout等来构建页面,但这些布局使用起来很麻 ...
- 英文DIAMAUND钻石DIAMAUND词汇
首先谈谈钻石和金刚石的名称.金刚石是一种天然矿物,是钻石的原石.习惯上人们常将加工过的金刚石称为钻石,而未加工过的称为金刚石(当然,有的金刚石不用加工便可应用).钻石是那些达到宝石级别的金刚石晶体切磨 ...
- 【设计模式】Builder
前言 Builder设计模式,允许一步一步构建一个复杂的对象.将构建步骤抽象出来,让每个具体的Builder去实现构建步骤的内容.这样子就可以用同样的构建步骤,构建出不一样的对象.在Director类 ...
- 019.nexus搭建docker镜像仓库/maven仓库
一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...
- sparkstreaming 黑名单过滤
要用到transform and rdd.leftOuterJoin transform: 使 DStream 和 RDD 之间的类型进行了转换,然后可以进行调用 leftOuterJoin(左外连接 ...