vue 导出excel自定义样式添加超链接

import Excel from 'exceljs/dist/exceljs.min.js';

Vue.prototype.$Excel = Excel;

man.js导入模块

methods

    exportExcel() {

      let param = Object.assign({}, this.filters);

      if (param.appVersionName.includes("all")) {

        param["appVersionName"] = this.versions;

      }

      param["page"] = 0;

      param["pageSize"] = 0;

      param["sortCond"] = store.getters.io_filters.sortCond;

      param["sortOrder"] = store.getters.io_filters.sortOrder;

      let time = this.addDay(this.timeRange[1]);

      param["startDate"] = this.timeRange[0];

      param["endDate"] = time;

      this.$axios

        .post("/api/v1/io/category", param)

        .then(response => {

          if (response.data.code == 1) {

            let res = response.data.data.data;

            for (let i = 0; i < res.length; i++) {

              let resarr = res[i].type.split(",");

              let arr = [];

              // delete res[i].appName;

              // delete res[i].md5;

              // delete res[i].modifier;

              // delete res[i].dealTime;

              if (res[i].updateTime) {

                res[i].updateTime=res[i].updateTime.split('.')[0];

              }

              res[i].createTimeMax=res[i].createTimeMax.split('.')[0];

              // console.log(res[i].updateTime)

              switch (res[i].status) {

                case -1:

                  res[i].status = "未处理";

                  break;

                case 0:

                  res[i].status = "处理中";

                  break;

                case 1:

                  res[i].status = "已解决";

                  break;

                case -2:

                  res[i].status = "无效问题";

                  break;

                case 2:

                  res[i].status = "无效问题";

                  break;

                default:

                  break;

              }

              for (let index = 0; index < resarr.length; index++) {

                switch (resarr[index]) {

                  case "1":

                    arr.push("主线程IO");

                    break;

                  case "2":

                    arr.push("读写buffer过小");

                    break;

                  case "3":

                    arr.push("重复读文件");

                    break;

                  case "4":

                    arr.push("关闭泄露");

                    break;

                  default:

                    break;

                }

              }

              res[i].type = arr.toString();

            }

            this.saveAsExcel(res);

            // let workbook = new this.$Excel.Workbook();

            // const ws = this.$XLSX.utils.json_to_sheet(res);

            // const wb = this.$XLSX.utils.book_new();

            // ws.A1.l={Target:'https://www.baidu.com',Tooltip:"Find us @ SheetJS.com!"}

            // ws.A1.s= { font: {underline: true }};

            // console.log(ws.A1)

            // console.log(wb)

            // this.$XLSX.utils.book_append_sheet(wb, ws, "excel");

            // let wbout =  this.$XLSX.writeFile(wb,"io.xlsx");

          } else {

            this.$message.error(

              "请求错误,错误信息:" + JSON.stringify(response.data.msg)

            );

          }

        })

        .catch(error => {

          this.$message.error("请求错误,错误信息:" + JSON.stringify(error));

        });

    },

    async saveAsExcel(data) {

      //cell style

      var fills = {

        solid: {

          type: "pattern",

          pattern: "solid",

          fgColor: { argb: "32a77e" }

        }

      };

      //create a workbook

      var workbook = new this.$Excel.Workbook();

      //add header

      var ws1 = workbook.addWorksheet('io数据列表', {properties:{tabColor:{argb:'FFC0000'}}});

      ws1.properties.defaultRowHeight = 50;

      ws1.columns = [

        { header: 'I/O数据列表', style: { font: { size:12 } } },

      ];

      ws1.addRow(["ID", "异常类型","异常数量","异常场景","版本","状态","备注","责任人","上报时间","更新时间","修复版本号"]);

      ws1.getRow(1).font={size: 18, bold: true };

      ws1.getRow(1).fill=fills.solid;

      ws1.getRow(1).height = 50;

      ws1.getRow(2).fill=fills.solid;

      ws1.getRow(2).height = 50;

      ws1.getRow(2).font={ name: 'Comic Sans MS', family: 4, size: 15, bold: true };

      for (let i = 0; i < data.length; i++) {

        let arr=[]

        arr.length=11

        arr[0]=data[i].id

        arr[1]=data[i].stack

        arr[2]=data[i].count

        arr[3]=data[i].type

        arr[4]=data[i].appVersionName

        arr[5]=data[i].status

        arr[6]=data[i].mark

        arr[7]=data[i].persons

        arr[8]=data[i].createTimeMax

        arr[9]=data[i].updateTime

        arr[10]=data[i].repairVersion

        ws1.addRow(arr);

        ws1.getRow(i+3).height = 50;

        if (data[i].status=="已解决") {

          ws1.getCell('F'+(i+3)).font={color:{argb: "32cd32"}};

        }else{

          ws1.getCell('F'+(i+3)).font={color:{argb: "ff0000"}};

        }

        ws1.getCell('B'+(i+3)).font={color:{argb: "0000ff"},underline:"single",  italic: true};

        let str ="http://localhost:9090/io/ioDetail?filters=" +  Base64.encode(JSON.stringify(this.filters)) +"&";

        for (let i = 0; i < this.timeRange.length; i++) {

          str += "time=" + this.timeRange[i] + "&";

        }

        str += "appVersionName=" + data[i].appVersionName + "&";

        for (let i = 0; i < this.versions.length; i++) {

          str += "versions=" + this.versions[i] + "&";

        }

        str += "md5=" + data[i].md5 + "&";

        str += "id=" + data[i].id;

        ws1.getCell('B'+(i+3)).value={text: data[i].stack,hyperlink: str,tooltip: 'www.mylink.com'}

      }

      ws1.mergeCells("A1:K1");

      this.rowCenter(ws1, 1, data.length+2);

      this.colWidth(ws1, 11, 20);

      ws1.getColumn(2).width = 30;

      const buf = await workbook.xlsx.writeBuffer();

      saveAs(new Blob([buf]), "I/O数据列表.xlsx");

    },

    //设置 start-end 行单元格水平垂直居中/添加边框

    rowCenter: function(arg_ws, arg_start, arg_end) {

      for (let i = arg_start; i <= arg_end; i++) {

        arg_ws.findRow(i).alignment = {

          vertical: "middle",

          horizontal: "center"

        };

        //循环 row 中的 cell,给每个 cell添加边框

        arg_ws.findRow(i).eachCell(function(cell, index) {

          cell.border = {

            top: { style: "thin" },

            left: { style: "thin" },

            bottom: { style: "thin" },

            right: { style: "thin" }

          };

        });

      }

    },

    //设置 start-end 列的宽度

    colWidth: function(arg_ws, arg_cols, arg_width) {

      for (let i = 1; i < arg_cols+1; i++) {

        if (i==2) {

          arg_ws.getColumn(i).width = 50;             

        }else{

          arg_ws.getColumn(i).width = arg_width;   

        }

      }

    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容