Node.js 中的 js-xlsx 库可以读写excel表格文件
参考资料
概念
在使用这个库之前,先介绍库中的一些概念。
-
workbook 对象,指的是整份 Excel 文档。我们在使用 js-xlsx 读取 Excel 文档之后就会获得 workbook 对象。 -
worksheet 对象,指的是 Excel 文档中的表。我们知道一份 Excel 文档中可以包含很多张表,而每张表对应的就是 worksheet 对象。 -
cell 对象,指的就是 worksheet 中的单元格,一个单元格就是一个 cell 对象。
它们的关系如下:
// workbook { SheetNames: ['sheet1', 'sheet2'],//一个文档有多个表,故此是数组 Sheets: { // worksheet 'sheet1': { //表名对象 // cell 'A1': { ... }, //单元格对象 // cell 'A2': { ... }, ... }, // worksheet 'sheet2': { // cell 'A1': { ... }, // cell 'A2': { ... }, ... } } }
用法
基本用法
- 用
XLSX.readFile 打开 Excel 文件,返回 workbook - 用
workbook.SheetNames 获取表名 - 用
workbook.Sheets[xxx] 通过表名获取表格 - 按自己的需求去处理表格
- 生成新的 Excel 文件
具体用法
读取 Excel 文件
import XLSX from 'xlsx'; const workbook = XLSX.readFile('someExcel.xlsx', opts);
获取 Excel 文件中的表
// 获取 Excel 中所有表名 const sheetNames = workbook.SheetNames; // 返回 ['sheet1', 'sheet2'] // 根据表名获取对应某张表 const worksheet = workbook.Sheets[sheetNames[0]];
通过 worksheet[address] 来操作表格,以 ! 开头的 key 是特殊的字段。
// 获取 A1 单元格对象 let a1 = worksheet['A1']; // 返回 { v: 'hello', t: 's', ... } // 获取 A1 中的值 a1.v // 返回 'hello'
// 获取表的有效范围 worksheet['!ref'] // 返回 'A1:B20' worksheet['!range'] // 返回 range 对象,{ s: { r: 0, c: 0}, e: { r: 100, c: 2 } }
// 获取合并过的单元格 worksheet['!merges'] // 返回一个包含 range 对象的列表,[ {s: { r: 0, c: 0 }, c: { r: 2, c: 1 } } ]
安装
npm i xlsx -S
读取数据
let xlsx = require('xlsx');
let workbook = xlsx.readFile('susu.xlsx'); //workbook就是xls文档对象
let sheetNames = workbook.SheetNames; //获取表名
let sheet = workbook.Sheets[sheetNames[0]]; //通过表明得到表对象
var data =xlsx.utils.sheet_to_json(sheet); //通过工具将表对象的数据读出来并转成json
写数据
let xlsx = require('xlsx'); let json = [
{ '姓名': 'test1', '年龄': 20 },
{ '姓名': 'test2', '年龄': 10 },
{ '姓名': 'test2', '年龄': 10,'性别':'男' },
{ '姓名': 'test2', '年龄': 10 }
];
let ss = xlsx.utils.json_to_sheet(json); //通过提供工具函数将json转表对象
console.log('ss对象',ss) //含有 属性!ref: "A1:C5" ,代表表格的范围 //let keys = Object.keys(ss).sort(); //排序 [需要注意,必须从A1开始]
//let ref = keys[1]+':'+keys[keys.length - 1]; //这个是定义一个字符串 也就是表的范围[A1:C5]
//Object.assign({},ss,{'!ref':ref}) //表对象[注意表明]
let workbook = { //定义操作文档 SheetNames:['nodejs-sheetname'], //定义表名 Sheets:{ 'nodejs-sheetname': }, }
xlsx.writeFile(workbook,"./suzhenwei.xls",,{type:"array"}); //最后添加配置array 最多存999条,将数据写入文件,此时就是浏览器就会导出文件了

|