vue使用xlsx导出excel

1 篇文章 0 订阅

封装xlsx并导出excel文件

介绍

封装方法基于掘金大神一杠,我只是拿过来改造成适合自己使用
使用了简单的封装,可以自定义行高列宽等样式,应该满足大部分导出的需要

感谢: 一杠大神

安装

npm 安装

npm install xlsx@0.16.8
npm install file-saver
npm install xlsx-style-medalsoft
xlsx-style-medalsoft 解决报错问题

在这里插入图片描述

在node_modules/xlsx-style-medalsoft/xlsx.js文件里找到write_ws_xml_data方法,在方法上方添加以下代码即可
var DEF_PPI = 96, PPI = DEF_PPI;
function px2pt(px) { return px * 96 / PPI; }
function pt2px(pt) { return pt * PPI / 96; }

在这里插入图片描述

xlsx封装的js文件 附带我自己写好的Dome

示例地址 Demo

封装好的ExportExcel.js文件

config 参数说明

config - size 设置列宽-行高大小

参数说明类型默认值可选值
cols列宽,每一个对象对应每一列Array[{wpx}]、[{wch}]
rows行高,每一个对象对应每一行Array[{hpx}]、[{hch}]

size 举例

<script>
export default {
  data() {
    return {
      config: {
        size: {
          cols: [
            // 第一列
            { wch: 15 },
            // 第二列
            { wch: 15 },
          ],
          rows: [
            // 第一行
            { hpx: 20 },
            // 第二行
            { hpx: 40 },
          ],
        },
      },
    }
  },
}
</script>

config - merge 合并单元格

参数说明类型默认值可选值
s开始Object范围选择:{ c:列, r:行 }
e结束Object范围选择:{ c:列, r:行 }
s-c:s-r;e-c:e-r------------------------------------------
c列坐标Number
r行坐标Number
merge 举例
<script>
export default {
  data() {
    return {
      config: {
        merge: [
          // A1 - K1 合并
          { s: { c: 0, r: 0 }, e: { c: 10, r: 0 } }
          // A3 - K3 合并
          {
            s: { c: 0, r: 2 },
            e: { c: 10, r: 2 },
          },
        ],
      },
    }
  },
}
</script>

config - myStyle 样式设置

具体可以参考xslx官网 npm xlsx-style

参数说明类型默认值可选值
all默认所有样式Object
rowCells统一设置某一行的样式Object
sepcialCol定义特殊列的样式Object
mergeBorder对导出合并单元格无边框的处理,只针对dom导出,因为只有dom导出会出现合并无边框的情况Array[]

all 举例

all: {
    font: { name: '宋体', sz: 11, color: { auto: 1
        }
    },
    // 设置边框
    border: {
      top: {
        style: 'thin',
        color: {
          auto: 1,
            },
        },
      left: {
        style: 'thin',
        color: {
          auto: 1,
            },
        },
      right: {
        style: 'thin',
        color: {
          auto: 1,
            },
        },
      bottom: {
        style: 'thin',
        color: {
          auto: 1,
            },
        },
    },
    alignment: {
        /// 自动换行
      wrapText: 1,
        // 居中
      horizontal: 'center',
      vertical: 'center',
      indent: 0,
    },
}

rowCells 举例

// 设置第6行样式
6: {
    s: {
        border: {
            top: {
                style: 'thin',
                color: {
                    auto: 1,
                },
            },
            left: {
                style: 'thin',
                color: {
                    auto: 1,
                },
            },
            right: {
                style: 'thin',
                color: {
                    auto: 1,
                },
            },
            bottom: {
                style: 'thin',
                color: {
                    auto: 1,
                },
            },
        },
        alignment: {
            /// 自动换行
            wrapText: 1,
            // 居中
            horizontal: 'center',
            vertical: 'center',
            indent: 0,
        },
        font: {
            name: '黑体',
            sz: 11,
            bold: true,
        },
    },
}

sepcialCol 举例

// 设置A1样式,也就是第一列第一行
A1: {
    s: {
      font: {
        name: '黑体',
        sz: 16,
        bold: true,
      },
      alignment: {
        horizontal: 'center',
        vertical: 'center',
      },
    },
}

mergeBorder

设置 mergeBorder=[] 即可

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明呀Ming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值