前端下载excel模板(包含样式)

使用 xlsx 插件  npm install xlsx --save

使用 xlsx-style 插件  npm install xlsx-style --save

import XLSX from "xlsx";

import XLSXStyle from "xlsx-style";

methods:{

downloadTemplate() {

let data = [

        [

          "备注信息1",

          "备注信息2",

          "备注信息3",

          "备注信息4",  

        ],

        [

          "自定义录入,不超500字符",

          "自定义录入,不超500字符",

          "自定义录入,不超500字符",

          "自定义录入,不超500字符",

        ],

        [],

        [],

        [

          "略",

          "略",

          "略",

          "略"

        ]

      ];

      let titles = ["模板下载"];

      var sheet = XLSX.utils.json_to_sheet(data, {

        skipHeader: true

      });

      /**设置标题头背景色 */

      for (const key in sheet) {

        // 第一行,表头

        if (key.replace(/[^0-9]/gi, "") === "1") {

          sheet[key].s = {

            fill: {

              //背景色

              fgColor: { rgb: "aacf8d" }

            },

            alignment: {

              horizontal: "center",

              wrapText: true,

              vertical: "center"

            }

          };

        } else if (

          key.replace(/[^0-9]/gi, "") === "2" ||

          key.replace(/[^0-9]/gi, "") === "5"

        ) {

          sheet[key].s = {

            alignment: {

              horizontal: "center",

              wrapText: true,

              vertical: "center"

            }

          };

        }

        sheet["!cols"] = [

          { wpx: 150 },

          { wpx: 150 },

          { wpx: 150 },

          { wpx: 150 }

        ];

        //  合并单元格(第二行到第四行)

        sheet["!merges"] = [

          { s: { r: 1, c: 0 }, e: { r: 3, c: 0 } },

          { s: { r: 1, c: 1 }, e: { r: 3, c: 1 } },

          { s: { r: 1, c: 2 }, e: { r: 3, c: 2 } },

          { s: { r: 1, c: 3 }, e: { r: 3, c: 3 } }

        ];

      }

      this.openDownload(

        this.sheet2blob(sheet, titles.join("-")),

        titles.join("-") + ".xlsx"

      );

    },

    sheet2blob(sheet, sheetName) {

      let wb = XLSX.utils.book_new();

      wb.SheetNames.push(sheetName);

      wb.Sheets[sheetName] = sheet;

      var wbout = XLSXStyle.write(wb, {

        bookType: "",

        bookSST: false,

        type: "binary"

      });

      var blob = new Blob([s2ab(wbout)], { type: "" }, sheetName);

      // 字符串转ArrayBuffer

      function s2ab(s) {

        var buf = new ArrayBuffer(s.length);

        var view = new Uint8Array(buf);

        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;

        return buf;

      }

      return blob;

    },

    openDownload(url, saveName) {

      if (typeof url == "object" && url instanceof Blob) {

        url = URL.createObjectURL(url); // 创建blob地址

      }

      var aLink = document.createElement("a");

      aLink.href = url;

      aLink.download = saveName || ""; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效

      var event;

      if (window.MouseEvent) event = new MouseEvent("click");

      else {

        event = document.createEvent("MouseEvents");

        event.initMouseEvent(

          "click",

          true,

          false,

          window,

          0,

          0,

          0,

          0,

          0,

          false,

          false,

          false,

          false,

          0,

          null

        );

      }

      aLink.dispatchEvent(event);

    }

}

 

81117042adec946ac37d6abd1b3d1ec5.png

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wu_wen_cai

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

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

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

打赏作者

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

抵扣说明:

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

余额充值