xlsx 处理 Excel 表格文件

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 05:57   941   0

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': { ... },
...
}
}
}

用法

基本用法

  1. XLSX.readFile 打开 Excel 文件,返回 workbook
  2. workbook.SheetNames 获取表名
  3. workbook.Sheets[xxx] 通过表名获取表格
  4. 按自己的需求去处理表格
  5. 生成新的 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条,将数据写入文件,此时就是浏览器就会导出文件了

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP