翼度科技»论坛 编程开发 JavaScript 查看内容

Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( d

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档, 还支持 xlsx 和 docx 文件的加密(具体使用看文档)。暂时不支持doc文件的解密
传送门:officecrypto-tool
读取加密的 Excel 示例
  1. 一:xlsx-populate
  2. // 只支持 xlsx, xlsx-populate  自带了解密功能,
  3. // 不过只支持 ecma376 agile 模式,也就是Office 生成的加密的docx,
  4. // WPS的就不行, WPS用的是 ecma376 standard 模式
  5. const XlsxPopulate = require('xlsx-populate');
  6. (async ()=>{
  7.     const input = await fs.readFile(`pass_test.xlsx`);
  8.     const output = await officeCrypto.decrypt(input, {password: '123456'});
  9.     const workbook = await XlsxPopulate.fromDataAsync(output);
  10.     // 或者可先判断文件是否是加密的
  11.     const isEncrypted = officeCrypto.isEncrypted(input);
  12.     let output = input;
  13.     if (isEncrypted) {
  14.         output = await officeCrypto.decrypt(input, {password: '123456'});
  15.     }
  16.     const workbook = await XlsxPopulate.fromDataAsync(output);
  17. })()
  18. 二:@zurmokeeper/exceljs https://www.npmjs.com/package/@zurmokeeper/exceljs
  19. // 只支持 xlsx @zurmokeeper/exceljs 直接内置了解密功能,完全兼容exceljs v4.3.0
  20. const Excel = require('@zurmokeeper/exceljs');
  21. (async ()=>{
  22.     // 从文件读取, 解密使用密码加密的excel文件
  23.     const workbook = new Excel.Workbook();
  24.     await workbook.xlsx.readFile(filename, {password:'123456'});
  25.     // 从流读取, 解密使用密码加密的excel文件
  26.     const workbook = new Excel.Workbook();
  27.     await workbook.xlsx.read(stream, {password:'123456'});
  28.     // 从 buffer 加载, 解密使用密码加密的excel文件
  29.     const workbook = new Excel.Workbook();
  30.     await workbook.xlsx.load(data, {password:'123456'});
  31. })()
  32. 三:xlsx
  33. // xlsx 支持 xls 和 xlsx
  34. const XLSX = require('xlsx');
  35. (async ()=>{
  36.     const input = await fs.readFile(`pass_test.xlsx`);
  37.     // const input = await fs.readFile(`pass_test.xls`); // 或者xls
  38.     const output = await officeCrypto.decrypt(input, {password: '123456'});
  39.     const workbook = XLSX.read(output);
  40.     // 或者可先判断文件是否是加密的
  41.     const isEncrypted = officeCrypto.isEncrypted(input);
  42.     let output = input;
  43.     if (isEncrypted) {
  44.         output = await officeCrypto.decrypt(input, {password: '123456'});
  45.     }
  46.     const workbook = XLSX.read(output);
  47. })()
  48. 四:node-xlsx
  49. // 其实 node-xlsx 只是对xlsx 进行了封装,里面还是调用 xlsx 去解析的
  50. const nodeXlsx = require('node-xlsx');
  51. (async ()=>{
  52.     const input = await fs.readFile(`pass_test.xlsx`);
  53.     // const input = await fs.readFile(`pass_test.xls`); // 或者xls
  54.     const output = await officeCrypto.decrypt(input, {password: '123456'});
  55.     const workbook = nodeXlsx.parse(output);
  56.     // 或者可先判断文件是否是加密的
  57.     const isEncrypted = officeCrypto.isEncrypted(input);
  58.     let output = input;
  59.     if (isEncrypted) {
  60.         output = await officeCrypto.decrypt(input, {password: '123456'});
  61.     }
  62.     const workbook = nodeXlsx.parse(output);
  63. })()
复制代码
读取加密的 Word 示例
使用:mammoth  officecrypto-tool
  1. const officeCrypto = require('officecrypto-tool');
  2. const fs = require('fs').promises;
  3. const mammoth = require('mammoth');
  4. (async ()=>{
  5.     const input = await fs.readFile(`pass_test.xlsx`);
  6.     const output = await officeCrypto.decrypt(input, {password: '123456'});
  7.     await mammoth.convertToHtml({buffer: output});
  8.     // 或者可先判断文件是否是加密的
  9.     const isEncrypted = officeCrypto.isEncrypted(input);
  10.     let output = input;
  11.     if (isEncrypted) {
  12.         output = await officeCrypto.decrypt(input, {password: '123456'});
  13.     }
  14.     await mammoth.convertToHtml({buffer: output});
  15. })()
复制代码
使用其他的word读取库也是一样的道理,先使用 officecrypto-tool 解密以后再用对应的库去处理

来源:https://www.cnblogs.com/zurmokeeper/p/17680477.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具