乐趣区

关于javascript:推荐一个新的excel处理库-zurmokeeperexceljs支持xlsx文件的解密功能

举荐一个新的 excel 解决库,@zurmokeeper/exceljs,要害性能,反对 xlsx 文件的解密性能,文档地址,我的项目地址, 齐全兼容 exceljs

应用办法:

齐全兼容 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

起因:

须要实现一个读取 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 文件的解密性能。加密性能 TODO 中。

当初的想法是想持续保护这个我的项目,其实自己是始终关注 exceljs 的,提过 PR, 也答复了一些 issue,然而苦于没有更多的权限,也不可能敞开 issue,看着 issue 越来越多,其实很多是曾经解决的,或者是反复的。也有很多不错的 PR 在那里放着。

如果 exceljs 持续更新代码,@zurmokeeper/exceljs 会尽量放弃跟上,同时本人也会尽量去解决当初 exceljs 的 issue 和 pr,而后更新在 @zurmokeeper/exceljs,也欢送更多的开发者退出,issue 或者 pr 也好。不敢保障能做的多好,只能说尽力。我的项目地址

退出移动版