Echarts中toolbox工具栏添加(导出excel表格功能)

时间:2024-02-25 10:37:18

 项目中提到了一个需求,想要看到echarts图表中的数据,这里使用toolbox工具栏渲染出一个table表格,并加入导出excel功能。

所以就用到echarts配置项中的toolbox工具栏,使用 jquery.table2excel.js实现 导出excel功能。

话不多说,开整。

1.使用toolbox工具栏

 

2.最终实现功能

 

 

 

  1     echarts_max(){
  2       if (document.querySelector(".echarts_max") == null) {
  3         return
  4       }
  5       echarts.dispose(document.querySelector(".echarts_max"))
  6 
  7       let echarts_max = echarts.init(document.querySelector(".echarts_max"))
  8 
  9       echarts_max.setOption({
 10         "title": {
 11             "text": "",
 12             "left": "47%",
 13             "textStyle": {
 14               "fontSize": 24
 15             }
 16         },
 17         toolbox: {
 18           left:33,
 19           // top:10,
 20           feature: {
 21             dataView: {
 22               show: true,
 23               title: \'数据视图\',
 24               lang: [\'数据视图:\', \'关闭\', \'导出Excel\'],    // 按钮
 25               contentToOption: function (opts) {
 26                 $(".echarts_max").table2excel({    //下载jquery.table2excel.js,引入,$("#tempChart")是Echarts容器
 27                     exclude: ".noExl", //过滤位置的 css 类名, 有class = “noExl” 的行不被导出
 28                     filename: "最大需量", // 文件名称
 29                     name: "Excel Document Name.xls",
 30                     exclude_img: true,
 31                     exclude_links: true,
 32                     exclude_inputs: true
 33                 });
 34               },
 35               optionToContent: function (opt) {
 36                 // console.log(opt) 
 37                 //该函数可以自定义列表为table,opt是给我们提供的原始数据的obj。 可打印出来数据结构查看
 38                 var axisData = opt.xAxis[0].data; //坐标轴
 39                 var series = opt.series; //折线图的数据
 40                 var tdHeads =
 41                   \'<td  style="margin-top:10px; padding: 0 15px">日期</td>\'; //表头
 42                 var tdBodys = "";
 43                 series.forEach(function (item) {
 44                   tdHeads += `<td style="padding:5px 15px">${item.name}</td>`;
 45                 });
 46                 var table = `<table border="1" style="margin-left:20px;border-collapse:collapse;font-size:14px;text-align:center;"><tbody><tr>${tdHeads} </tr>`;
 47                 for (var i = 0, l = axisData.length; i < l; i++) {
 48                   for (var j = 0; j < series.length; j++) {
 49                     if (series[j].data[i] == undefined) {
 50                       tdBodys += `<td>${"-"}</td>`;
 51                     } else {
 52                       tdBodys += `<td>${series[j].data[i][1]}</td>`;
 53                     }
 54                   }
 55                   table += `<tr><td style="padding: 0 15px">${axisData[i]}</td>${tdBodys}</tr>`;
 56                   tdBodys = "";
 57                 }
 58                 table += "</tbody></table>";
 59                 return table;
 60               },
 61             },
 62             magicType: {show: true, type: [\'line\', \'bar\']},
 63             restore: {show: true},
 64             saveAsImage: {show: true}
 65           }
 66         },
 67         "legend": {
 68             type:"scroll",
 69             orient: "horizontal", //布局朝向
 70             width:\'80%\',
 71             left: 180,
 72             top: 5,
 73             "data": this.langedName,
 74             "itemWidth": 10,
 75             "itemHeight": 10,
 76             "itemGap": 20,
 77             "textStyle": {
 78               "color": "#898989",
 79               "lineHeight": 10
 80             },
 81             pageButtonItemGap:3
 82         },
 83         "tooltip": {
 84           "backgroundColor": "#fff",
 85           "trigger": "axis",
 86           "textStyle": {
 87             "color": "#565656",
 88             "lineHeight": 28
 89           },
 90           "confine": true,
 91           "padding": 12,
 92           axisPointer: {
 93             type: \'cross\',
 94             crossStyle: {
 95                 color: \'#999\'
 96             }
 97           },
 98           textStyle:{
 99             fontSize:14,
100             fontFamily:FONTFAMILYS
101           },
102         },
103         "grid": {
104           width:\'92%\',
105           left: 55,
106           containLabel: true,
107         },
108         dataZoom: [
109           {
110             type: \'inside\',
111             start: 0,
112             end: 100
113           }, 
114           {
115             start: 0,
116             end: 100,
117             height:20,
118           }
119         ],
120         "xAxis": {
121             "type": "category",
122             data:this.xLabel,
123             "axisLine": {
124               "show": false
125             },
126             "axisTick": {
127               "show": false
128             },
129             axisPointer: {//鼠标滑过显示长方形背景
130               type: \'shadow\'
131             },
132             axisLabel:{
133               fontSize:14,
134               fontFamily:FONTFAMILYS
135             },
136         },
137         "yAxis": {
138             "nameTextStyle": {
139               "color": "gray"
140             },
141             "type": "value",
142             "axisLabel": {
143                 "color": "#a0a9bc",
144                 "margin": 0,
145                 fontSize:14,
146                 fontFamily:FONTFAMILYS
147             },
148             "splitLine": {
149                 "lineStyle": {
150                     "type": "dashed"
151                 }
152             },
153             // "minInterval": 1,//自动计算的坐标轴最小间隔大小。
154             "axisLine": {
155                 "show": false
156             },
157             "axisTick": {
158                 "show": false
159             }
160         },
161         series: this.seriesList
162       })
163     }

首先引入jquery.js,再次引入 jquery.table2excel.js 下载地址1:https://github.com/rainabba/jquery-table2excel ,  下载地址2: https://blog-static.cnblogs.com/files/liuchenxing/jquery.table2excel.js

    echarts_max(){
      if (document.querySelector(".echarts_max") == null) {
        return
      }
      echarts.dispose(document.querySelector(".echarts_max"))

      let echarts_max = echarts.init(document.querySelector(".echarts_max"))

      echarts_max.setOption({
        "title": {
            "text""",
            "left""47%",
            "textStyle": {
              "fontSize"24
            }
        },
        toolbox: {
          left:33,
          // top:10,
          feature: {
            dataView: {
              showtrue,
              title\'数据视图\',
              lang: [\'数据视图:\'\'关闭\'\'导出Excel\'],    // 按钮
              contentToOptionfunction (opts) {
                $(".echarts_max").table2excel({
                    exclude".noExl"//过滤位置的 css 类名, 有class = “noExl” 的行不被导出
                    filename"最大需量"// 文件名称
                    name"Excel Document Name.xls",
                    exclude_imgtrue,
                    exclude_linkstrue,
                    exclude_inputstrue
                });
              },
              optionToContentfunction (opt) {
                // console.log(opt) 
                //该函数可以自定义列表为table,opt是给我们提供的原始数据的obj。 可打印出来数据结构查看
                var axisData = opt.xAxis[0].data//坐标轴
                var series = opt.series//折线图的数据
                var tdHeads =
                  \'<td  style="margin-top:10px; padding: 0 15px">日期</td>\'//表头
                var tdBodys = "";
                series.forEach(function (item) {
                  tdHeads += `<td style="padding:5px 15px">${item.name}</td>`;
                });
                var table = `<table border="1" style="margin-left:20px;border-collapse:collapse;font-size:14px;text-align:center;"><tbody><tr>${tdHeads} </tr>`;
                for (var i = 0l = axisData.lengthi < li++) {
                  for (var j = 0j < series.lengthj++) {
                    if (series[j].data[i] == undefined) {
                      tdBodys += `<td>${"-"}</td>`;
                    } else {
                      tdBodys += `<td>${series[j].data[i][1]}</td>`;
                    }
                  }
                  table += `<tr><td style="padding: 0 15px">${axisData[i]}</td>${tdBodys}</tr>`;
                  tdBodys = "";
                }
                table += "</tbody></table>";
                return table;
              },
            },
            magicType: {showtruetype: [\'line\'\'bar\']},
            restore: {showtrue},
            saveAsImage: {showtrue}
          }
        },
        "legend": {
            type:"scroll",
            orient"horizontal"//布局朝向
            width:\'80%\',
            left180,
            top5,
            "data"this.langedName,
            "itemWidth"10,
            "itemHeight"10,
            "itemGap"20,
            "textStyle": {
              "color""#898989",
              "lineHeight"10
            },
            pageButtonItemGap:3
        },
        "tooltip": {
          "backgroundColor""#fff",
          "trigger""axis",
          "textStyle": {
            "color""#565656",
            "lineHeight"28
          },
          "confine"true,
          "padding"12,
          axisPointer: {
            type\'cross\',
            crossStyle: {
                color\'#999\'
            }
          },
          textStyle:{
            fontSize:14,
            fontFamily:FONTFAMILYS
          },
        },
        "grid": {
          width:\'92%\',
          left55,
          containLabeltrue,
        },
        dataZoom: [
          {
            type\'inside\',
            start0,
            end100
          }, 
          {
            start0,
            end100,
            height:20,
          }
        ],
        "xAxis": {
            "type""category",
            data:this.xLabel,
            "axisLine": {
              "show"false
            },
            "axisTick": {
              "show"false
            },
            axisPointer: {//鼠标滑过显示长方形背景
              type\'shadow\'
            },
            axisLabel:{
              fontSize:14,
              fontFamily:FONTFAMILYS
            },
        },
        "yAxis": {
            "nameTextStyle": {
              "color""gray"
            },
            "type""value",
            "axisLabel": {
                "color""#a0a9bc",
                "margin"0,
                fontSize:14,
                fontFamily:FONTFAMILYS
            },
            "splitLine": {
                "lineStyle": {
                    "type""dashed"
                }
            },
            // "minInterval": 1,//自动计算的坐标轴最小间隔大小。
            "axisLine": {
                "show"false
            },
            "axisTick": {
                "show"false
            }
        },
        seriesthis.seriesList
      })
    }