vue 導(dǎo)出excel自定義樣式添加超鏈接

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

Vue.prototype.$Excel = Excel;

man.js導(dǎo)入模塊

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("重復(fù)讀文件");

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? case "4":

? ? ? ? ? ? ? ? ? ? arr.push("關(guān)閉泄露");

? ? ? ? ? ? ? ? ? ? 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(

? ? ? ? ? ? ? "請求錯(cuò)誤,錯(cuò)誤信息:" + JSON.stringify(response.data.msg)

? ? ? ? ? ? );

? ? ? ? ? }

? ? ? ? })

? ? ? ? .catch(error => {

? ? ? ? ? this.$message.error("請求錯(cuò)誤,錯(cuò)誤信息:" + 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數(shù)據(jù)列表', {properties:{tabColor:{argb:'FFC0000'}}});

? ? ? ws1.properties.defaultRowHeight = 50;

? ? ? ws1.columns = [

? ? ? ? { header: 'I/O數(shù)據(jù)列表', style: { font: { size:12 } } },

? ? ? ];

? ? ? ws1.addRow(["ID", "異常類型","異常數(shù)量","異常場景","版本","狀態(tài)","備注","責(zé)任人","上報(bào)時(shí)間","更新時(shí)間","修復(fù)版本號(hào)"]);

? ? ? 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數(shù)據(jù)列表.xlsx");

? ? },

? ? //設(shè)置 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"

? ? ? ? };

? ? ? ? //循環(huán) row 中的 cell,給每個(gè) cell添加邊框

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

? ? ? ? ? cell.border = {

? ? ? ? ? ? top: { style: "thin" },

? ? ? ? ? ? left: { style: "thin" },

? ? ? ? ? ? bottom: { style: "thin" },

? ? ? ? ? ? right: { style: "thin" }

? ? ? ? ? };

? ? ? ? });

? ? ? }

? ? },

? ? //設(shè)置 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;? ?

? ? ? ? }

? ? ? }

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容