【node+demo】使用node-xlsx设置表格的样式

写这篇文章的来源

好久没有写文章了,生疏了,基本本人项目需求,想要给生成的文件设置样式,发现无效,使用的node-xlsx包工具,于是查找很多的文档,大多数是收费的,只能自己硬着头皮查找文档了,终于让我知道原因了记录一下,也本着开源精神,免费分享大家,一块努力进步,以后将来自己老了也可以回顾,废话不多数开始

准备

  1. 大家都早知道生成excel文件的库有很多,像本次介绍的node-xlsx,还有xlsx,xlsx-style等工具包,但是细心的你们会发现他们都是基于xlsx封装的xlsx官方文档链接
  2. 我们也知道xlsx-style也是基于xlsx库封装的样式库文件,可以在xlsx的基础上设置样式

正文

  • 我们开始下载node-xlsx包
npm install node-xlsx  
// 或者使用yarn安装
yarn ****
  • 请看node-xlsx版本
    0.23.0

  • 我们生成xls文件代码

let nodeXlsx = require('node-xlsx');

// 指定单元格内容样式:四个方向的黑边框
let contentCellStyle = {
    border: {
        top: {
            style: "medium", color: "#000"
        },
        bottom: {
            style: "medium", color: "#000"
        },
        left: {
            style: "medium", color: "#000"
        },
        right: {
            style: "medium", color: "#000"
        },
    }
};
// 指定标题单元格样式:加粗居中 修改背景色
let headerStyle = {
    font: {
        bold: true
    },
    alignment: {
        horizontal: "center"
    },
	fill: {
        fgColor: {rgb: "C0504D"},//16进制,注意要去掉#
    },
}
    
    let d = [{
        name: "Sheet1",
        data: [
                     [
                        {v: "表头1",s: headerStyle},
                        {v: "表头2",s: headerStyle}
                     ], 
                    [
                       {v: 石日天,  s: contentCellStyle}, 
	                   {v: 叶几撇, s: contentCellStyle}
                    ]
              ],
	   options: {
           '!cols': [
		               {wch: 60},
					   {wch: 20}
		    ]
		}
    }];
    // !cols 指定列的宽度
    fs.writeFileSync(p, nodeXlsx.build(d), {'flag': 'w'});
  • 生成文件查看内容如下
    在这里插入图片描述
    样式什么的都没有生效,当时表格宽度起作用了,太丑了这样子,我是不能接受的。开始解决样式问题

解决样式不起作用问题

  • 在网上查询了一些办法后,发现一个方法需要把node-xlsx里对xlsx的引入改为xlsx-style就能够成功设置样式,此时需要下载node-xlsx和xlsx-style
node install node-xlsx  xlsx-style
  • 开始修改包文件内容
    在这里插入图片描述
    在这里插入图片描述
    需要上图中路径下的文件打开修改途中的第四行 const xlsx_1 = require(“xlsx”); 修改成const xlsx_1 = require(“xlsx-style”);

修改测试后报错为 xlsx_1… is not function 显而易见,这个方法是想不通的,如果大家都和我一样的认为,那就打错特错,那是因为各个版本不同造成了,按下次版本下载,就可解决

在这里插入图片描述
但是,此版本太过古老了,但也是一种解决方案,出现问题是,我设置行高的是否不管用了。不完美的办法。下边看第二种方案

方案二

我们上边说了,我们是吧node-xlsx包里的引入修改了,于是我们对比xlsx-style里的引用源码和最初node-xlsx引用的xlsx文件源码对比发现,是由于xlsx-style的源码中多引用了一个styleBuilder方法如下图(左侧xlsx-style 右侧xlsx)
在这里插入图片描述
问题找到了,我们只需要把这个方法源码也cv进右侧的源码中,就可以了,于是操刀干起来再导出数据结果如图所示

在这里插入图片描述

你看样式是不是生效了,是不是好看多了。

今天就到这里了,转载请注明出处,谢谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值