Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( d
|
Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档, 还支持 xlsx 和 docx 文件的加密(具体使用看文档)。暂时不支持doc文件的解密
传送门:officecrypto-tool
读取加密的 Excel 示例- 一:xlsx-populate
- // 只支持 xlsx, xlsx-populate 自带了解密功能,
- // 不过只支持 ecma376 agile 模式,也就是Office 生成的加密的docx,
- // WPS的就不行, WPS用的是 ecma376 standard 模式
- const XlsxPopulate = require('xlsx-populate');
- (async ()=>{
- const input = await fs.readFile(`pass_test.xlsx`);
- const output = await officeCrypto.decrypt(input, {password: '123456'});
- const workbook = await XlsxPopulate.fromDataAsync(output);
- // 或者可先判断文件是否是加密的
- const isEncrypted = officeCrypto.isEncrypted(input);
- let output = input;
- if (isEncrypted) {
- output = await officeCrypto.decrypt(input, {password: '123456'});
- }
- const workbook = await XlsxPopulate.fromDataAsync(output);
- })()
- 二:@zurmokeeper/exceljs https://www.npmjs.com/package/@zurmokeeper/exceljs
- // 只支持 xlsx @zurmokeeper/exceljs 直接内置了解密功能,完全兼容exceljs v4.3.0
- const Excel = require('@zurmokeeper/exceljs');
- (async ()=>{
- // 从文件读取, 解密使用密码加密的excel文件
- const workbook = new Excel.Workbook();
- await workbook.xlsx.readFile(filename, {password:'123456'});
- // 从流读取, 解密使用密码加密的excel文件
- const workbook = new Excel.Workbook();
- await workbook.xlsx.read(stream, {password:'123456'});
- // 从 buffer 加载, 解密使用密码加密的excel文件
- const workbook = new Excel.Workbook();
- await workbook.xlsx.load(data, {password:'123456'});
- })()
- 三:xlsx
- // xlsx 支持 xls 和 xlsx
- const XLSX = require('xlsx');
- (async ()=>{
- const input = await fs.readFile(`pass_test.xlsx`);
- // const input = await fs.readFile(`pass_test.xls`); // 或者xls
- const output = await officeCrypto.decrypt(input, {password: '123456'});
- const workbook = XLSX.read(output);
- // 或者可先判断文件是否是加密的
- const isEncrypted = officeCrypto.isEncrypted(input);
- let output = input;
- if (isEncrypted) {
- output = await officeCrypto.decrypt(input, {password: '123456'});
- }
- const workbook = XLSX.read(output);
- })()
- 四:node-xlsx
- // 其实 node-xlsx 只是对xlsx 进行了封装,里面还是调用 xlsx 去解析的
- const nodeXlsx = require('node-xlsx');
- (async ()=>{
- const input = await fs.readFile(`pass_test.xlsx`);
- // const input = await fs.readFile(`pass_test.xls`); // 或者xls
- const output = await officeCrypto.decrypt(input, {password: '123456'});
- const workbook = nodeXlsx.parse(output);
- // 或者可先判断文件是否是加密的
- const isEncrypted = officeCrypto.isEncrypted(input);
- let output = input;
- if (isEncrypted) {
- output = await officeCrypto.decrypt(input, {password: '123456'});
- }
- const workbook = nodeXlsx.parse(output);
- })()
复制代码 读取加密的 Word 示例
使用:mammoth officecrypto-tool- const officeCrypto = require('officecrypto-tool');
- const fs = require('fs').promises;
- const mammoth = require('mammoth');
- (async ()=>{
- const input = await fs.readFile(`pass_test.xlsx`);
- const output = await officeCrypto.decrypt(input, {password: '123456'});
- await mammoth.convertToHtml({buffer: output});
- // 或者可先判断文件是否是加密的
- const isEncrypted = officeCrypto.isEncrypted(input);
- let output = input;
- if (isEncrypted) {
- output = await officeCrypto.decrypt(input, {password: '123456'});
- }
- await mammoth.convertToHtml({buffer: output});
- })()
复制代码 使用其他的word读取库也是一样的道理,先使用 officecrypto-tool 解密以后再用对应的库去处理
来源:https://www.cnblogs.com/zurmokeeper/p/17680477.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2023-9-5 22:09:59
举报
回复
分享
|
|
|
|