推荐一个新的excel处理库, @zurmokeeper/exceljs,支持xlsx文件的加解密功能和多表头导出功能

推荐一个新的excel处理库, @zurmokeeper/exceljs, 关键功能,支持xlsx文件的加解密功能、快速导出嵌套列(多表头)的excel文件,文档地址项目地址, 完全兼容exceljs

截止2023-7-20 已经发了5个版本了,加了一些新功能,也修复了一些新bug,也有新的贡献者加入,欢迎更多人加入,变更日志: 地址

使用方法:

完全兼容exceljs 所以原来对exceljs 

const ExcelJS = require('exceljs');
可以直接换成
const ExcelJS = require('@zurmokeeper/exceljs');
其它API的使用保持不变
-------------------------------------------------

const ExcelJS = require('@zurmokeeper/exceljs');

// 从文件读取
const workbook = new Excel.Workbook();
await workbook.xlsx.readFile(filename);

// 从文件读取, 解密使用密码加密的excel文件
const workbook = new Excel.Workbook();
await workbook.xlsx.readFile(filename, {password:'123456'});
// ... 使用 workbook


// 从流读取
const workbook = new Excel.Workbook();
await workbook.xlsx.read(stream);

// 从流读取, 解密使用密码加密的excel文件
const workbook = new Excel.Workbook();
await workbook.xlsx.read(stream, {password:'123456'});
// ... 使用 workbook


// 从 buffer 加载
const workbook = new Excel.Workbook();
await workbook.xlsx.load(data);

// 从 buffer 加载, 解密使用密码加密的excel文件
const workbook = new Excel.Workbook();
await workbook.xlsx.load(data, {password:'123456'});
// ... 使用 workbook

快速导出嵌套列(多表头)的excel文件说明地址

起因:

需要完成一个读取WPS带密码保密的excel功能,找遍了社区所有的库,都没有找到,一开始发现 xlsx-populate 支持解密,后面发现只支持 ecma376 agile encrytion。是现在office xlsx格式的加密方式,不是WPS的加密方法,所以无法解密.

后面发现 WPS 对xlsx文件的加解密用的是 ecma376 standard encrytion. 然后参考官方文档和其他语言的库对照着来实现,比如python写的msoffcrypto-tool 和 go 的 excelize. 由于不是很懂加解密知识,实现的过程也是一波三折。具体的可以看SF,这里有几个链接,问题1, 问题2, 问题3

本来是想给exceljsPR的,但是发现exceljs快2年没人维护了,后面23/4月底的时候有几个维护者开始合并代码,但是进度很慢,而且中间还停滞了很久,而且这些维护者还不是作者本人,有没发布的权限也不了解,所以想用上这个解密功能不知道还要多久。

xlsx-populate 也是很久没有人维护了,而且xlsx-populate对于 ecma376 agile encrytion 的处理代码不是单独一个库来处理的,而我是把这些加解密的实现单独出来了一个包,officecrypto-tool,实现加解密的话,直接使用这个包就好了,也就不需要 xlsx-populate 原来关于加解密的那部分代码了,不知道人家会不会接受,所以也没有给 xlsx-populatePR了。

还有一个库,叫xlsx,是sheetjs出的,这个功能最广,支持读取xls格式。但是这个库其实是个社区版,阉割了加解密功能,看源码可以看到,写到加解密那部分的时候,然后代码就没有了,付费版才支持。所以估计是不会接受PR的。毕竟加了谁还买他们的付费版。

node.js 处理excel用的最多的3个库:

exceljs

API最友好,文档最丰富,功能也强大,不支持加解密,不支持xls, 快处于无人维护状态

xlsx-populate

API一般,文档一般,但是支持ecma376 agile encrytion加解密,不支持xls, 快处于无人维护状态

xlsx 社区版

API一般,文档一般,不支持加解密,但是支持的文件格式最广,比如支持xls。由于是社区版,估计也不会加什么新功能了

所以在exceljs v4.3.0的基础写了这个 @zurmokeeper/exceljs

是基于 2023/5/5 exceljs 的最新提交代码上的,对比v4.3.0版本,解决了一些bug外(感谢其他开发者)。最重要的更新就是支持对xlsx文件的加解密功能。

现在的想法是想继续维护这个项目,其实本人是一直关注exceljs的,提过PR,也回答了一些issue,但是苦于没有更多的权限,也不能够关闭issue,看着issue越来越多,其实很多是已经处理的,或者是重复的。也有很多不错的PR在那里放着。

如果 exceljs 继续更新代码, @zurmokeeper/exceljs 会尽量保持跟上,同时自己也会尽量去处理现在exceljs 的issue 和 pr,然后更新在 @zurmokeeper/exceljs,也欢迎更多的开发者加入,issue或者pr也好。不敢保证能做的多好,只能说尽力。项目地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个利用 js-xlsx 实现 Excel 文件导入导出功能的示例: 首先在 HTML 文件中引入 js-xlsx : ```html <script src="https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js"></script> ``` 然后在 JavaScript 文件中编写以下代码: ```javascript // 导出 Excel 文件 function exportExcel(data, filename) { const ws = XLSX.utils.json_to_sheet(data); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); XLSX.writeFile(wb, `${filename}.xlsx`); } // 导入 Excel 文件 function importExcel(file, callback) { const reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = (e) => { const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); const sheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[sheetName]; const result = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); callback(result); }; } ``` 其中,exportExcel 函数用于将数据导出Excel 文件,参数 data 为要导出的数据,filename 为导出文件名。 importExcel 函数用于导入 Excel 文件,参数 file 为要导入的文件,callback 为导入成功后的回调函数,回调函数的参数 result 为导入的数据。 示例代码中使用了 FileReader 对象读取文件内容,然后使用 js-xlsx 解析 Excel 文件并将数据转化为 JSON 格式。 使用示例: ```javascript const data = [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 22, gender: '女' }, { name: '王五', age: 25, gender: '男' }, ]; exportExcel(data, 'test'); // 导出 Excel 文件文件名为 test.xlsx const inputElement = document.getElementById('input-file'); inputElement.addEventListener('change', (e) => { const file = e.target.files[0]; importExcel(file, (result) => { console.log(result); // 输出导入的数据 }); }); ``` 在 HTML 文件中添加一个文件选择框: ```html <input type="file" id="input-file"> ``` 用户选择一个 Excel 文件后,调用 importExcel 函数导入数据,并在回调函数中处理导入的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值