在node中操作excle的方式除了常用的xlsx之外,exceljs也是一个不错的选择。相对于xlsx来说,exceljs的一部分功能在xlsx的社区版中是没有的,只能在xlsx的收费版中使用对单元格的格式进行设置等。在这个时候,如果我们想降低成本,那么我们就可以使用excelsj作为xlsx的替换品。

使用

单元格操作

单元格样式

在我们使用exceljs操作excel的时候,我们可能需要设置单元格的格式。对于单元格的格式的设置,我们可以給定的单元格设置。下面是一个例子:

  1. const wb = new Workbook();
  2. const worksheet = wb.addWorksheet();
  3. const exampleCell = worksheet.getCell('A1');
  4. exampleCell.style = {
  5. font: {
  6. size: 16,
  7. bold: true,
  8. name: '仿宋',
  9. },
  10. alignment: {
  11. horizontal: 'left',
  12. vertical: 'middle',
  13. }
  14. }
  1. 如上所示:我们通过给单元格的`style`属性赋值来设置单元格的格式。其中通过_font_来设置字段,通过_alignment_来设置对齐方式。让我们来仔细看看style是一个怎样的对象。
  1. interface Style {
  2. numFmt: string;
  3. font: Partial<Font>;
  4. alignment: Partial<Alignment>;
  5. protection: Partial<Protection>;
  6. border: Partial<Borders>;
  7. fill: Fill;
  8. }
  1. 其中各位字段的含义如下:
  • numFmt: 表示单元格的数字格式
  • font:表示单元格的字段
  • alignment: 表示单元格的对齐方式
  • protection: 表示单元格的保护方式
  • border: 表示单元格的边框设置
  • fill: 表示单元格的填充方式

    单元格的数字格式

    其中的numFmt可以是如:0.00%dd/mm/yyyy的形式,是表示百分比和时间的一种方法。更多的可以参考excel中的数字格式内容。下面我们再看看其他几个字段的接口:

    单元格中的字体设置

    1. interface Font {
    2. name: string;
    3. size: number;
    4. family: number;
    5. scheme: 'minor' | 'major' | 'none';
    6. charset: number;
    7. color: Partial<Color>;
    8. bold: boolean;
    9. italic: boolean;
    10. underline: boolean | 'none' | 'single' | 'double' | 'signleAccounting' | 'doubleAccounting';
    11. vertAlign: 'superscript' | 'subscript';
    12. strike: boolean;
    13. outline: boolean;
    14. }

    如上所示,对于单元格的字体的设置还是有不少字段的。其中我们常用的字段有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
  • 3-Mono, Others - unknow

    颜色

    1. interface Color {
    2. argb: string;
    3. theme: number;
    4. }

    在颜色接口中,我们可以看到,颜色是支持透明度的。argb的字符串是四个值的16位字符串表示FF00FF00。表示(透明度,红色,绿色和蓝色)。

    单元格的对齐方式

    本来以为单元格的对齐方式应该是比较简单的。但一看接口,发现并不是那么回事:

    1. interface Alignment {
    2. horizontal: 'left' | 'right' | 'center' | 'fill' | 'justify' | 'centerContinuous' | 'distributed';
    3. vertical: 'top' | 'middle' | 'bottom' | 'distributed' | 'justify';
    4. wrapText: boolean;
    5. shrinkToFit: boolean;
    6. indent: number;
    7. readingOrder: 'rtl' | 'lrt';
    8. textRotation: number | 'vertical';
    9. }

    我们看到在Alignment的接口中就存在7个不同的类型。大致看一下,我们可以发现有我们常见的垂直对齐水平对齐缩进阅读方向文本旋转角度这几种。还有我们不常见的自动换行(wrapText)和自动缩小填充(shrinkToFit)。
    我们来看一下水平对齐方式:

  • left 左对齐

  • center 居中对齐
  • right 右对齐
  • fill 填充
  • justify 两端对齐
  • centerContinuous 跨列居中
  • distributed 分散对齐

垂直对齐方式有:

  • top 顶部对齐
  • middle 居中对齐
  • bottom 底部对齐
  • justify 两端对齐
  • distributed 分散对齐

    单元格保护

    单元格保护的接口就比较简单了。其只有一个属性:是否加锁。
    1. interface Protect {
    2. lock: boolean
    3. }

    单元格边框

    单元格边框也是一个比较简单的概念却有一个相对比较复杂的接口。 ```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; } ``` 看到了没有,一个简单的边框接口都这么复杂。其原因是边框有上,右,下,左四个边和对角线设置。边框的类型也分为多种。

欢迎赞赏
欢迎赞赏