本文目录一览:

如何使用nodejs读写excel文件

nodejs作为功能强大的后端开发语言,有许多第三方包扩展nodejs能力。读写excel文件也有相关的第三方扩展。

node读取文件(node读取文件流)node读取文件(node读取文件流)


node读取文件(node读取文件流)


本文介绍nodejs下如何通过使用node-xlsx扩展读写excel文件。

KNIME 读取Excel 文件

      KNIME可以读取多种格式的文件,本文将介绍最常见的EXCEL格式的文件读取。

      在KNIME中使用”Excel Reader”Node来读取excel文件。

一 “Excel Reader” Node 读取单个工作表

      编辑界面如图所示,图中标示了几个关键的选项。

1.选择文件地址,可以是本地Excel文件,也可以是OneDrive中在线的Excel文件;

2.选择要读取的sheet的名字。一个Excel可能包含多个sheet,但一个Excel Reader Node只能读取一个sheet;

3.选择列名。可以自定义数字,任意选择第几行的数据作为列的名字。

4.选择读取的范围。默认读取整个表格,可以通过改变列的字母和行的数字,自定义读取表格范围。

运行,就可以看到结果了,如图所示。

一 “Excel Reader” Node +循环读取多个工作表

      上文已介绍一个Excel Reader Node 只能读取一个sheet。但,如果一个文件中有几十个sheet,难道要编辑几十个Node吗?No,No...这显然违背了用KNIME提升工作效率的原则。下面就介绍如何使用“Excel Reader”和循环读取多个sheet。

      我根据Iris数据集中的Class列内容,将数据集分成三个sheet,分别命名Iris-virginica,Iris-versicolor,Iris-setosa.

      方法很简单,只需要4个Node就可以完美地解决问题。

      “Read Excel sheet Name”,故名思意,就是读取所有sheet的名字。无需特殊编辑,只需选择文件地址就可以了。运行结果只有一列,就是sheet的名字。

      下面就要开始循环了。想要Excel Reader根据sheet名字挨个读取。下面一步使用“Table Row To Variable Loop Start”,将上一步结果的行也就是这里的sheet名字,作为变量,并开始循环。此Node无需设置,保持默认就好。

      接下来就是”Excel Reader”了,设置在上文中详细讲过,就不赘述了。

  ,“Loop End”结束循环(无需设置)。

执行工作流,成功。是不是超级简单。

nodejs获取文件夹下所有文件

function findSync(startPath) {

    let result=[];

    function finder(path) {

        let files=fs.readdirSync(path);

        files.forEach((val,index) = {

            let fPath=join(path,val);

            let stats=fs.statSync(fPath);

            if(stats.isDirectory()) finder(fPath);

            if(stats.isFile()) result.push(fPath);

        });

    }

    finder(startPath);

    return result;

}

let fileNames=findSync('./');

node读取本地文件中文乱码

node读取本地文件

由于Node环境当中不支持GBK编码,此时读到的文件,英文可读取,但中文乱码

node.js当中的Buffer对象支持的编码格式的种类(支持的格式:ascii、utf8、utf16le、ucs2、base64、binary、hex)有限,不支持GBK的编码形式。

解决办法

iconv-lite用于在node当中处理在各种作系统出现的各种奇特编码,该模块不提供读写文件的作,只提供文件编码转换的功能。

npm install iconv-lite

restitle即为txt文档中的中文

此时会出现一个

Iconv-lite warning: decode()-ing strings is deprecated. Refer to

上面这个github中给出了详细解释,大概意思是说

在使用iconv.decode功能进行解码之前,原始资源(无意间)已经body += ck通过jascript类型转换进行了解码。

双重解码不仅会导致错误的结果,而且几乎不可能恢复原始字节,因为utf8转换是有损的,因此即使这样做也 iconv.decode(new Buffer(body, 'utf8'), 'win1252') 无济于事。

不是很明白,但有个忽略的方法

使用前说明一下忽略,就不会报错

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

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

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

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

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

二、解析xlsx文件信息

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

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")