千家信息网

开源适用于JavaScript的Excel解析器和生成器是怎样的

发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,开源适用于JavaScript的Excel解析器和生成器是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。介绍xlsx-popula
千家信息网最后更新 2025年02月19日开源适用于JavaScript的Excel解析器和生成器是怎样的

开源适用于JavaScript的Excel解析器和生成器是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

介绍

xlsx-populate是一个用JavaScript编写的Excel XLSX解析器/生成器,支持Node.js和浏览器,具备jQuery和D3.js的形式写法,加密功能以及保持现有工作簿功能和样式不变的特点!

Github

https://github.com/dtjohnson/xlsx-populate

获取xlsx-populate

npm install xlsx-populate

xlsx-populate使用ES6功能,因此仅支持Node.js v4 +

用法举例

xlsx-populate具有用于处理Excel工作簿的广泛API

  • 填充数据

要在工作簿中填充数据,先加载一个(空白,数据或文件)。然后,可以访问工作簿中的工作表和单元格以进行操作。

const XlsxPopulate = require('xlsx-populate'); // 加载新的空白工作簿 XlsxPopulate.fromBlankAsync()    .then(workbook => {         // 修改工作簿。         workbook.sheet("Sheet1").cell("A1").value("This is neat!");         // 写入文件。         return workbook.toFileAsync("./out.xlsx");     });
  • 解析数据

const XlsxPopulate = require('xlsx-populate'); // 加载现有工作簿 XlsxPopulate.fromFileAsync("./Book1.xlsx")     .then(workbook => {         // 修改工作簿。         const value = workbook.sheet("Sheet1").cell("A1").value();         console.log(value);    });
  • 范围操作

xlsx-populate还支持单元格范围,以允许一次解析/操作多个单元格。

const r = workbook.sheet(0).range("A1:C3"); // 将所有单元格值设置为相同的值: r.value(5); // 使用2维数组设置值: r.value([     [1, 2, 3],     [4, 5, 6],     [7, 8, 9] ]); // 使用回调函数设置值: r.value((cell, ri, ci, range) => Math.random());

一个常见的用例是简单地一次提取所有值。可以使用Sheet.usedRange方法轻松地做到这一点。

const values = workbook.sheet("Sheet1").usedRange().value();

或者,可以在一个范围内设置值,而该范围内仅需左上角的单元格:

workbook.sheet(0).cell("A1").value([     [1, 2, 3],     [4, 5, 6],     [7, 8, 9] ]);
  • 行列操作

sheet.column("B").width(25).hidden(false); const cell = sheet.row(5).cell(3);
  • 管理Sheet

//按索引获取工作表 const sheet1 = workbook.sheet(0); // 按名称获取工作表 const sheet2 = workbook.sheet("Sheet2"); // 将所有工作表作为数组获取 const sheets = workbook.sheets();

可以添加新的工作表:

const newSheet1 = workbook.addSheet('New 1'); const newSheet2 = workbook.addSheet('New 2', 1); const newSheet3 = workbook.addSheet('New 3', 'Sheet1'); const sheet = workbook.sheet('Sheet1'); const newSheet4 = workbook.addSheet('New 4', sheet);

重命名

const sheet = workbook.sheet(0).name("new sheet name");

移动

workbook.moveSheet("Sheet1"); workbook.moveSheet("Sheet1", 2); workbook.moveSheet("Sheet1", "Sheet2");

删除

// 获取活动表 const sheet = workbook.activeSheet();// 检查当前工作表是否处于活动状态sheet.active() // returns true or false // 激活工作表sheet.active(true); // 或者从工作部激活workbook.activeSheet("Sheet2");

Excel支持创建引用地址,公式或常量的已定义名称。这些定义的名称可以作用于整个工作簿或仅单个工作表。 xlsx-populate支持查找引用单元格或范围的已定义名称。 (取消引用其他名称将导致错误。)如果将数据填充到已知模板中,则定义的名称特别有用。

// 查找工作簿范围的名称,并将其值设置为5。 workbook.definedName("some name").value(5); //查找范围为第一张表的名称,并将其值设置为" foo"。workbook.sheet(0).definedName("some other name").value("foo");
// 创建/修改工作簿范围定义的名称 workbook.definedName("some name", "TRUE"); // 删除工作表范围的定义名称: workbook.sheet(0).definedName("some name", null);
  • 查找和替换

可以在工作簿或工作表的单元格中搜索文本的出现,并有选择地替换它们

// 在工作簿中查找所有出现的文本" foo",并替换为" bar"。 workbook.find("foo", "bar"); // 返回匹配单元格的数组 // 找到匹配项,但不要替换。workbook.find("foo"); //只在第一张sheet。workbook.sheet(0).find("foo"); // 检查特定单元格是否与值匹配。workbook.sheet("Sheet1").cell("A1").find("foo"); // Returns true or false
// 使用RegExp将所有小写字母替换为大写 workbook.find(/[a-z]+/g, match => match.toUpperCase());
  • 样式

xlsx-populate支持多种单元格格式

// 获得单一风格 const bold = cell.style("bold"); // true // 获取多种样式 const styles = cell.style(["bold", "italic"]); // { bold: true, italic: true } // 设置单一样式 cell.style("bold", true); // 设置多种样式 cell.style({ bold: true, italic: true });
  • 富文本

可以在现有的RTF单元格上阅读和修改RTF:

// 假设A1是富文本单元格 const RichText = require('xlsx-Populate').RichText; const cell = workbook.sheet(0).cell('A1'); cell.value() instanceof RichText // returns true const richtext = cell.value();// 获取连接文本 richtext.text();// loop through each rich text fragment for (let i = 0; i < richtext.length; i++) {     const fragment = richtext.get(i);    // Get the style     fragment.style('bold');     // Get many styles     fragment.style(['bold', 'italic']);     // Set one style     fragment.style('bold', true);     // Set many styles     fragment.style({ 'bold': true, 'italic': true });     // Get the value     fragment.value();    // Set the value     fragment.value('hello'); }// remove the first rich text fragment richtext.remove(0); // clear this rich texts richtext.clear();

如何将单元格设置为富文本:

const RichText = require('xlsx-Populate').RichText; const cell = workbook.sheet(0).cell('A1'); // 将单元格值设置为富文本 cell.value(new RichText());// 添加两个富文本片段 cell.value()    .add('hello ', { italic: true, bold: true })     .add('world!', { fontColor: 'FF0000' });
  • 浏览器

浏览器中的用法几乎相同。可以在Github代码中找到一个功能示例。该库以XlsxPopulate全局加载。可以从文件中加载现有工作簿:

// 假设页面中有一个文件输入,标识为" file-input" var file = document.getElementById("file-input").files[0]; //File对象是一种特殊的Blob。XlsxPopulate.fromDataAsync(file)    .then(function (workbook) {         // ...    });

如果将responseType设置为'arraybuffer',也可以从AJAX加载:

var req = new XMLHttpRequest(); req.open("GET", "http://...", true); req.responseType = "arraybuffer"; req.onreadystatechange = function () {     if (req.readyState === 4 && req.status === 200){         XlsxPopulate.fromDataAsync(req.response)            .then(function (workbook) {                 // ...             });     } }; req.send();

要下载工作簿,可以将其导出为Blob(默认行为)或base64字符串。然后,可以将链接插入DOM并下载它:

workbook.outputAsync()     .then(function (blob) {         if (window.navigator && window.navigator.msSaveOrOpenBlob) {             // 如果是IE,则必须使用其他方法。             window.navigator.msSaveOrOpenBlob(blob, "out.xlsx");         } else {             var url = window.URL.createObjectURL(blob);             var a = document.createElement("a");             document.body.appendChild(a);             a.href = url;             a.download = "out.xlsx";             a.click();             window.URL.revokeObjectURL(url);             document.body.removeChild(a);         }     });

另外,可以通过数据URI下载,但是IE不支持此下载:

workbook.outputAsync("base64")     .then(function (base64) {         location.href = _"data:" + XlsxPopulate.MIME_TYPE + ";base64," + base64;     });
  • Promises

xlsx-populate使用Promise管理异步输入/输出。默认情况下,它使用浏览器或Node.js中定义的Promise。在不支持诺言(IE)的浏览器中,通过JSZip使用polyfill。

var Promise = XlsxPopulate.Promise;

可以覆盖与其他符合ES6的库(例如bluebird)一起使用的默认Promise库。

const Promise = require("bluebird"); const XlsxPopulate = require("xlsx-populate"); XlsxPopulate.Promise = Promise;
  • 加密

支持XLSX Agile加密和解密,因此可以读写受密码保护的工作簿。要阅读受保护的工作簿,请输入密码作为选项:

XlsxPopulate.fromFileAsync("./Book1.xlsx", { password: "S3cret!" })     .then(workbook => {         // ...     });

同样,写加密的工作簿:

workbook.toFileAsync("./out.xlsx", { password: "S3cret!" });

………

总结

xlsx-populate的功能绝不仅仅是以上介绍的内容,由于篇幅有限,更多的功能可以参考Github,具备详细的功能代码片段和API说明文档,enjoy it!

看完上述内容,你们掌握开源适用于JavaScript的Excel解析器和生成器是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

工作 单元 名称 支持 文本 范围 功能 数据 样式 浏览器 浏览 文件 方法 加密 生成器 生成 内容 多种 数组 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 出租房屋的网络安全 达达配送服务器不高兴 机场运营数据库 实时数据库 北京瑚琏网络技术有限公司 王者荣耀服务器名字由来 虚拟服务器端口 台州JAVA软件开发工作好找吗 数据库主键id标识如何设置 数据库数据统计分析图表 什么是数据库审计 redis数据库集合查询 批量删除每行的重复数据库 农行软件开发体检offer dota2 协调服务器 数据库如何查询出来的数据不重复 中科云计算机软件开发培训 系统 服务器 网络安全攻击事件溯源 互联网公司服务器怎么做 西安回收服务器交换机 江苏企业软件开发管理方法 数据库中可以存储图片的数据类型 安徽阜阳的DNS服务器地址 天河区数据网络技术开发经验丰富 建立用户联系方式数据库优点 温州助力智慧校园软件开发 想当网络安全工程师 网络安全问题分析与设计文献检索 怎么从数据库中读取数据并计算 小区投票数据库
0