试想这样一种情况,一个不熟悉技术的人需要在网站中展示他存在 Excel 里的数据,数据量很大,人工操作很繁琐,且容易出错,如果要做到用户友好,程序的任务是读入 Excel,解析,以正确的格式存入数据库。
在 Java 环境下,可以用 Apache POI 来操作 office 全家桶的读写,我不熟悉Java,所以这篇文章就记录下用 NodeJS 解析 Excel(xlsx 格式)数据为Json格式。

node-xlsx

这篇文章是建立在 node-xlsx 的基础上的,你可以在 github 以及 npm 获取到包。
用法如下:

xlsx -> Json

1
2
3
4
5
6
7
8
var xlsx = require('node-xlsx').default; 
//Or import xlsx from 'node-xlsx';

// Parse a buffer
const workSheetsFromBuffer = xlsx.parse(fs.readFileSync(`${__dirname}/myFile.xlsx`));

// Parse a file
const workSheetsFromFile = xlsx.parse(`${__dirname}/myFile.xlsx`);

Json -> xlsx

1
2
3
4
5
var xlsx = require('node-xlsx').default;
// Or import xlsx from 'node-xlsx';

const 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}]); // Returns a buffer

实例

Excel 转 Json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var xlsx = require("node-xlsx"); 
var fs = require('fs');
var list = xlsx.parse("demo.xlsx");
console.log(JSON.stringify(list));
//console.log(list);
writeFile("xlsx2json.json",JSON.stringify(list));
function writeFile(fileName,data) {
fs.writeFile(fileName,data,'utf-8',complete);
function complete(err) {
if(!err) {
console.log("文件生成成功");
}
}
}

demo.xlsx 内容如下
demo.xlsx
生成的 Json 格式如下
xlsx2json

Json 转 Excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14

var xlsx = require('node-xlsx');
var fs = require('fs');
const 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}]); // Returns a buffer
writeFile("all.xlsx",buffer);
function writeFile(fileName,data) {
fs.writeFile(fileName,data,'utf-8',complete);
function complete(err) {
if(!err) {
console.log("文件生成成功");
}
}
}

demo.json 格式如下
xlsx2json
json2xlsx.xlsx 内容如下
demo.xlsx

通过上面的例子可以看出,Excel 的一行对应着一条 Json 数据,然而这种方式并不适合数据库与 Excel 之间的转换,所以需要对 Json 内容作转换。