Texcel本身没有实现excel的解析和处理,它只是补充ExcelJS的一些接口,方便使用。比如读取excel中的数据,下载excel,设置样式等。此文档旨在介绍ExcelJS的用法,如果有涉及texcel增加的接口,会标识出来。官方原文档>看这里。
引入texcel
通过import引入
方法就是很通用的,先安装,再使用
npm install @inagora/texcel --save-dev
使用texcel
import ExcelJS from 'texcel';
// 创建一个excel
const wb = new ExcelJS.Wrokbook();
直接script标签在页面引入texcel
texcel本身的代码量很小,只有几K。可以把ExcelJS和texcel分开加载
<script src="https://cdn.jsdelivr.net/npm/exceljs/dist/exceljs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@inagora/texcel/dist/texcel.min.js"></script>
当然,也可以用texcel.bundle.min.js,它把exceljs.min.js和texcel.min.js打包到了一起。
<script src="https://cdn.jsdelivr.net/npm/@inagora/texcel/dist/texcel.bundle.min.js"></script>
浏览器里读取excel
浏览器获取文件的方式大概有三种:input组件、拖拽、剪切板粘贴,不管哪种方式,最终都会获得file对象,比如
<input type="file" onchange="getExcel(event)" />
<script>
async function getExcel(e) {
// 获得文件对象file
const file = e.target.files[0];
// 通过工具方法readFile获得workbook实例
const workbook = await ExcelJS.util.readFile(file);
console.log(workbook);
}
</script>
如上代码,通过input组件获得文件对象后,就可以用使用工具方法readFile获得一个Workbook实例了。然后通过这个实例的方法和属性,就可以操作excel了。
直接把数据下载成excel
要把数据保存成excel下载下来,首先得整理数据,以aoa(array of array)或者aoo(array of object)来存,比如
// aoa 格式的数据
const data1 = [
[ 'name', 'sex', 'age' ],
[ '张三', '男', '22' ],
[ '李四', '女', '21' ]
];
// aoo 格式的数据
const data2 = [
{
name: '张三',
sex: '男',
age: '22'
},
{
name: '李四',
sex: '女',
age: '21'
}
];
然后用工具方法writeFile保存成excel下载
ExcelJS.util.writeFile('人员.xlsx', data1 );
ExcelJS.util.writeFile('人员2.xlsx', data2 );
Workbook的直接下载
同时,为了在浏览器里方便下载Workbook实例,我们在它原型链上增加了writeFile方法。
const wb = new ExcelJS.Workbook();
const ws = wb.addWorksheet('Sheet1');
ws.addRows([
['name', 'age', 'class'],
['xiaoming', '8', 2],
['zhangsan', '9', 3],
['lisi', '8', 2]
]);
wb.writeFile('test.xlsx');
ExcelJS中的重要概念
- workbook,指一个excel文档或者实例,它可以是.xlsx,也可以是 .csv文件。有时候也可简写为wb。它里面至少包含一个worksheet。
- worksheet,指一个excel文档的一张工作表。一个workbook文档中会有一至多张woorksheet。有时也简写为ws。
未来计划
目前虽然实现了xlsx在浏览器的读写功能,但csv还不能处理,底层原因是Exceljs使用了fast-csv库来处理csv文件,但是fast-csv库是针对node环境编写的,并没有支持浏览器环境。为了实现csv文件的处理,接下来我会重写fast-csv库,让它在浏览器环境也能正常运行。
另外,Excelj目前是支持对column\row\cell来设置样式的,比如文字颜色,背景之类的,但是这个设置方式是从office借签来的,并不是css格式。接下来版本也会做一个“翻译”,让我们可以用css的方式来设置样式。