在node中操作excle的方式除了常用的xlsx之外,exceljs也是一个不错的选择。相对于xlsx来说,exceljs的一部分功能在xlsx的社区版中是没有的,只能在xlsx的收费版中使用对单元格的格式进行设置等。在这个时候,如果我们想降低成本,那么我们就可以使用excelsj作为xlsx的替换品。
使用
单元格操作
单元格样式
在我们使用exceljs操作excel的时候,我们可能需要设置单元格的格式。对于单元格的格式的设置,我们可以給定的单元格设置。下面是一个例子:
const wb = new Workbook();const worksheet = wb.addWorksheet();const exampleCell = worksheet.getCell('A1');exampleCell.style = {font: {size: 16,bold: true,name: '仿宋',},alignment: {horizontal: 'left',vertical: 'middle',}}
如上所示:我们通过给单元格的`style`属性赋值来设置单元格的格式。其中通过_font_来设置字段,通过_alignment_来设置对齐方式。让我们来仔细看看style是一个怎样的对象。
interface Style {numFmt: string;font: Partial<Font>;alignment: Partial<Alignment>;protection: Partial<Protection>;border: Partial<Borders>;fill: Fill;}
其中各位字段的含义如下:
- numFmt: 表示单元格的数字格式
- font:表示单元格的字段
- alignment: 表示单元格的对齐方式
- protection: 表示单元格的保护方式
- border: 表示单元格的边框设置
-
单元格的数字格式
其中的
numFmt可以是如:0.00%或dd/mm/yyyy的形式,是表示百分比和时间的一种方法。更多的可以参考excel中的数字格式内容。下面我们再看看其他几个字段的接口:单元格中的字体设置
interface Font {name: string;size: number;family: number;scheme: 'minor' | 'major' | 'none';charset: number;color: Partial<Color>;bold: boolean;italic: boolean;underline: boolean | 'none' | 'single' | 'double' | 'signleAccounting' | 'doubleAccounting';vertAlign: 'superscript' | 'subscript';strike: boolean;outline: boolean;}
如上所示,对于单元格的字体的设置还是有不少字段的。其中我们常用的字段有
name(字体名称),size(字体大小),bold(字体加粗)和italic(字体倾斜),还有color(字体颜色)。除了这几个字段外,其它字段我们可能比较陌生。我们还是要熟悉一下的。
先说一下字体名称吧,这里的字体名称和css中的字体名称还是有一些不同的。这里的字体名称是写什么是什么。不用像在css中那样去查找字体的对应关系。比如宋体就是宋体,不用css中设置SimSun。
再来看看underline吧。underline是设置下划线的。其默认值是false。underline对应的几个值的内容是:- true 有下划线
- false 不设置下划线
- none 下划线为空
- single 单下划线
- double 双下划线
- singleAccounting 会计用单下划线
- doubleAccounting 会计用双下划线
strike是删除线。vertAlign也是一种特殊格式。其值superscript表示上标,值subscript表示下标。charset表示是的字体字符集。outline表示的是字体的轮廓。family表示字体家族。值为
- 1-Serif
- 2-Sans Serif
-
颜色
interface Color {argb: string;theme: number;}
在颜色接口中,我们可以看到,颜色是支持透明度的。argb的字符串是四个值的16位字符串表示FF00FF00。表示(透明度,红色,绿色和蓝色)。
单元格的对齐方式
本来以为单元格的对齐方式应该是比较简单的。但一看接口,发现并不是那么回事:
interface Alignment {horizontal: 'left' | 'right' | 'center' | 'fill' | 'justify' | 'centerContinuous' | 'distributed';vertical: 'top' | 'middle' | 'bottom' | 'distributed' | 'justify';wrapText: boolean;shrinkToFit: boolean;indent: number;readingOrder: 'rtl' | 'lrt';textRotation: number | 'vertical';}
我们看到在
Alignment的接口中就存在7个不同的类型。大致看一下,我们可以发现有我们常见的垂直对齐,水平对齐,缩进,阅读方向和文本旋转角度这几种。还有我们不常见的自动换行(wrapText)和自动缩小填充(shrinkToFit)。
我们来看一下水平对齐方式: left 左对齐
- center 居中对齐
- right 右对齐
- fill 填充
- justify 两端对齐
- centerContinuous 跨列居中
- distributed 分散对齐
垂直对齐方式有:
- top 顶部对齐
- middle 居中对齐
- bottom 底部对齐
- justify 两端对齐
- distributed 分散对齐
单元格保护
单元格保护的接口就比较简单了。其只有一个属性:是否加锁。interface Protect {lock: boolean}
单元格边框
单元格边框也是一个比较简单的概念却有一个相对比较复杂的接口。 ```typescript interface Borders { left: Partial; top: Partial ; right: Partial ; bottom: Partial ; diagonal: Partial ; }
interface Border {
style: BorderStyle;
color: Partical
type BorderStyle = ‘thin’ | ‘dotted’ | ‘hair’ | ‘medium’ | ‘double’ | ‘thick’ | ‘dashDot’ | ‘dashDotDot’ | ‘slantDashDot’ | ‘mediumDashed’ | ‘mediumDashDotDot’ | ‘mediumDashDot’;
interface BorderDiagonal extends Border { up: boolean; down: boolean; } ``` 看到了没有,一个简单的边框接口都这么复杂。其原因是边框有上,右,下,左四个边和对角线设置。边框的类型也分为多种。
欢迎赞赏
