当前位置: 代码网 > it编程>编程语言>Javascript > ExcelJS:轻松实现Excel文件的读取、操作与写入

ExcelJS:轻松实现Excel文件的读取、操作与写入

2024年08月03日 Javascript 我要评论
ExcelJS 是一个开源的 JavaScript 库,支持读写 XLSX 和 CSV 格式的 Excel 文件。支持丰富的 Excel 功能,如单元格样式、公式、图表等。良好的文档和社区支持。跨平台,可在 Node.js 和浏览器环境中使用。

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

exceljs 是一个强大的 javascript 库,它允许你在 node.js 和浏览器环境中读取、操作和写入 excel 文件。本文将带你了解 exceljs 的基本用法,帮助你快速上手这个强大的工具。

1. 简介

exceljs 是一个开源的 javascript 库,支持读写 xlsx 和 csv 格式的 excel 文件。它具有以下特点:

  • 支持丰富的 excel 功能,如单元格样式、公式、图表等。
  • 良好的文档和社区支持。
  • 跨平台,可在 node.js 和浏览器环境中使用。

2. 安装

在开始使用 exceljs 之前,需要先进行安装。以下是在 node.js 环境中的安装方法:

npm install exceljs

如果你在浏览器环境中使用,可以直接从 github 仓库下载 exceljs.js 文件。

3. 创建工作簿

首先,我们需要创建一个工作簿(workbook)对象,然后才能进行其他操作。

const workbook = new exceljs.workbook();

4. 设置工作簿属性

可以为工作簿设置一些基本属性,如创建者、最后修改者、创建时间等。

workbook.creator = 'me';
workbook.lastmodifiedby = 'her';
workbook.created = new date(1985, 8, 30);
workbook.modified = new date();
workbook.lastprinted = new date(2016, 9, 27);

// 将工作簿日期设置为 1904 年日期系统
workbook.properties.date1904 = true;

5. 添加工作表

工作簿(workbook)由多个工作表(worksheet)组成。以下是如何添加一个工作表:

const sheet = workbook.addworksheet('my sheet');

使用 addworksheet 函数的第二个参数来指定工作表的选项。

// 创建带有红色标签颜色的工作表
const sheet = workbook.addworksheet('my sheet', {properties:{tabcolor:{argb:'ffc0000'}}});

// 创建一个隐藏了网格线的工作表
const sheet = workbook.addworksheet('my sheet', {views: [{showgridlines: false}]});

// 创建一个第一行和列冻结的工作表
const sheet = workbook.addworksheet('my sheet', {views:[{xsplit: 1, ysplit:1}]});

// 使用a4设置的页面设置设置创建新工作表 - 横向
const worksheet =  workbook.addworksheet('my sheet', {
  pagesetup:{papersize: 9, orientation:'landscape'}
});

// 创建一个具有页眉页脚的工作表
const sheet = workbook.addworksheet('my sheet', {
  headerfooter:{firstheader: "hello exceljs", firstfooter: "hello world"}
});

// 创建一个冻结了第一行和第一列的工作表
const sheet = workbook.addworksheet('my sheet', {views:[{state: 'frozen', xsplit: 1, ysplit:1}]});

6.删除工作表

// 创建工作表
const sheet = workbook.addworksheet('my sheet');

// 使用工作表 id 删除工作表
workbook.removeworksheet(sheet.id)

7.访问工作表

// 遍历所有工作表
// 注意: workbook.worksheets.foreach 仍然是可以正常运行的, 但是以下的方式更好
workbook.eachsheet(function(worksheet, sheetid) {
  // ...
});

// 按 name 提取工作表
const worksheet = workbook.getworksheet('my sheet');

// 按 id 提取工作表
const worksheet = workbook.getworksheet(1);

8. 列操作

可以为工作表设置列宽、列名等属性。

// 添加列标题并定义列键和宽度
// 注意:这些列结构仅是构建工作簿的方便之处,除了列宽之外,它们不会完全保留。
worksheet.columns = [
  { header: 'id', key: 'id', width: 10 },
  { header: 'name', key: 'name', width: 32 },
  { header: 'd.o.b.', key: 'dob', width: 10, outlinelevel: 1 }
];

// 通过键,字母和基于1的列号访问单个列
const idcol = worksheet.getcolumn('id');
const namecol = worksheet.getcolumn('b');
const dobcol = worksheet.getcolumn(3);

// 设置列属性

// 注意:将覆盖 c1 单元格值
dobcol.header = 'date of birth';

// 注意:这将覆盖 c1:c2 单元格值
dobcol.header = ['date of birth', 'a.k.a. d.o.b.'];

// 从现在开始,此列将以 “dob” 而不是 “dob” 建立索引
dobcol.key = 'dob';

dobcol.width = 15;

// 如果需要,隐藏列
dobcol.hidden = true;

// 为列设置大纲级别
worksheet.getcolumn(4).outlinelevel = 0;
worksheet.getcolumn(5).outlinelevel = 1;

// 列支持一个只读字段,以指示基于 `outlinelevel` 的折叠状态
expect(worksheet.getcolumn(4).collapsed).to.equal(false);
expect(worksheet.getcolumn(5).collapsed).to.equal(true);

// 遍历此列中的所有当前单元格
dobcol.eachcell(function(cell, rownumber) {
  // ...
});

// 遍历此列中的所有当前单元格,包括空单元格
dobcol.eachcell({ includeempty: true }, function(cell, rownumber) {
  // ...
});

// 添加一列新值
worksheet.getcolumn(6).values = [1,2,3,4,5];

// 添加稀疏列值
worksheet.getcolumn(7).values = [,,2,3,,5,,7,,,,11];

// 剪切一列或多列(右边的列向左移动)
// 如果定义了列属性,则会相应地对其进行切割或移动
// 已知问题:如果拼接导致任何合并的单元格移动,结果可能是不可预测的
worksheet.splicecolumns(3,2);

// 删除一列,再插入两列。
// 注意:第4列及以上的列将右移1列。
// 另外:如果工作表中的行数多于列插入项中的值,则行将仍然被插入,就好像值存在一样。
const newcol3values = [1,2,3,4,5];
const newcol4values = ['one', 'two', 'three', 'four', 'five'];
worksheet.splicecolumns(3, 1, newcol3values, newcol4values);

9. 行操作

以下是如何添加行、设置行高、隐藏行等操作。

  • 添加行
// 通过键值对在当前最后一行后添加几行,使用列键
worksheet.addrow({id: 1, name: 'john doe', dob: new date(1970,1,1)});
worksheet.addrow({id: 2, name: 'jane doe', dob: new date(1965,1,7)});

// 通过连续数组添加一行(分配给列 a、b 和 c)
worksheet.addrow([3, 'sam', new date()]);

// 通过稀疏数组添加一行(分配给列 a、e 和 i)
const rowvalues = [];
rowvalues[1] = 4;
rowvalues[5] = 'kyle';
rowvalues[9] = new date();
worksheet.addrow(rowvalues);

// 添加一行并继承样式
// 这新行将具有与最后一行相同的样式
// 并返回为行对象
const newrow = worksheet.addrow(rowvalues, 'i');

// 添加多行
const rows = [
  [5,'bob',new date()], // 通过数组添加行
  {id:6, name: 'barbara', dob: new date()} // 通过对象添加行
];
// 添加新行并返回它们作为行对象数组
const newrows = worksheet.addrows(rows);

// 添加多行并继承样式
// 这些新行将具有与最后一行相同的样式
// 并返回它们作为行对象数组
const newrowsstyled = worksheet.addrows(rows, 'i');
  • 插入行
// 在指定位置插入一行,可以传递值和样式
// pos: 要插入行的位置
// value: 要插入的行的值,可以是对象或数组
// style: 可选参数,指定新行的样式处理方式,默认为 'n'(无样式处理)

// 通过键值对在位置1插入几行,每次插入都会下移现有行
worksheet.insertrow(1, {id: 1, name: 'john doe', dob: new date(1970,1,1)});
worksheet.insertrow(1, {id: 2, name: 'jane doe', dob: new date(1965,1,7)});

// 通过连续数组在位置1插入一行(分配给列 a, b & c)
worksheet.insertrow(1, [3, 'sam', new date()]);

// 通过稀疏数组在位置1插入一行(分配给列 a, e & i)
var rowvalues = [];
rowvalues[1] = 4;
rowvalues[5] = 'kyle';
rowvalues[9] = new date();
// 插入新行并返回作为行对象
const insertedrow = worksheet.insertrow(1, rowvalues);

// 插入一行,并继承上方行的样式
// 这新行将具有与上方行相同的样式
// 并返回作为行对象
const insertedrowinherited = worksheet.insertrow(1, rowvalues, 'i');

// 插入一行,保持原始样式
// 这新行将保持它之前的样式
// 并返回作为行对象
const insertedroworiginal = worksheet.insertrow(1, rowvalues, 'o');

// 在位置1插入多行,当前位置1及之后的行将下移2行
var rows = [
  [5,'bob',new date()], // 通过数组添加行
  {id:6, name: 'barbara', dob: new date()} // 通过对象添加行
];
// 插入新行并返回它们作为行对象数组
const insertedrows = worksheet.insertrows(1, rows);

// 插入多行,并继承上方行的样式
// 这些新行将具有与上方行相同的样式
// 并返回它们作为行对象数组
const insertedrowsinherited = worksheet.insertrows(1, rows, 'i');

// 插入多行,保持原始样式
// 这些新行将保持它们在 'pos' 位置的原始样式
const inserted&nbsp;<svg t="1708604394457" class="icon" viewbox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2125" width="200" height="200"><path d="m512 64c247.424 0 448 200.576 448 448s-200.576 448-448 448s64 759.424 64 512 264.576 64 512 64z m0 256a192 192 0 1 0 0 384 192 192 0 0 0 0-384z" fill="#5b79e4" p-id="2126"></path></svg>

10. 单元格操作

可以对单元格进行赋值、设置样式等操作。

  • 处理单个单元格
const cell = worksheet.getcell('c3');

// 修改/添加单个单元格
cell.value = new date(1968, 5, 1);

// 查询单元格的类型
expect(cell.type).toequal(excel.valuetype.date);

// 使用单元格的字符串值
myinput.value = cell.text;

// 使用 html 安全的字符串进行渲染...
const html = '<div>' + cell.html + '</div>';

  • 合并单元格
// 合并一系列单元格
worksheet.mergecells('a4:b5');

// ...合并的单元格被链接起来了
worksheet.getcell('b5').value = 'hello, world!';
expect(worksheet.getcell('b5').value).tobe(worksheet.getcell('a4').value);
expect(worksheet.getcell('b5').master).tobe(worksheet.getcell('a4'));

// ...合并的单元格共享相同的样式对象
expect(worksheet.getcell('b5').style).tobe(worksheet.getcell('a4').style);
worksheet.getcell('b5').style.font = myfonts.arial;
expect(worksheet.getcell('a4').style.font).tobe(myfonts.arial);

// 取消单元格合并将打破链接的样式
worksheet.unmergecells('a4');
expect(worksheet.getcell('b5').style).not.tobe(worksheet.getcell('a4').style);
expect(worksheet.getcell('b5').style.font).not.tobe(myfonts.arial);

// 按左上,右下合并
worksheet.mergecells('k10', 'm12');

// 按开始行,开始列,结束行,结束列合并(相当于 k10:m12)
worksheet.mergecells(10,11,12,13);
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com