excel-gen.js 导出excel 功能

目录

概要

整体架构流程

html部分:

js部分:

json部分:

小结


概要

功能会使用到如下插件:

  • jszip.min.js
  • FileSaver.js

  • jquery.min.js

  • excel-gen.js

  • highcharts.js

  • exporting.js

  • export_data.js

主要是highcharts图表数据导出为excel,highcharts本身自带导出功能和额外使用excel-gen.js编写导出功能

整体架构流程

废话不多说,直接上代码:

html部分:

<div>
                <div class="DStab_mTitle mb-26">
                  <h3 id="DStab_mTitle">标题</h3>
                </div>
                <div class="fjb chart_top px-15">
                  <div class="DStab_con_head">
                    <span class="fl  mb-10">统计周期=:</span>
                    <select name="select fl" id="startYearSpan" class="fl mb-10">
                      <option value="2011年">2011年</option>
                      <option value="2012年">2012年</option>
                      <option value="2013年">2013年</option>
                      <option value="2014年">2014年</option>
                      <option value="2015年">2015年</option>
                      <option value="2016年">2016年</option>
                      <option value="2017年">2017年</option>
                      <option value="2018年">2018年</option>
                      <option value="2019年">2019年</option>
                      <option value="2020年">2020年</option>
                      <option value="2021年">2021年</option>
                      <option value="2022年">2022年</option>
                    </select>
                    <span class="pr-10 pl-10 fl  mb-10">至</span>
                    <select name="select" id="endYearSpan" class="fl mr-15  mb-10">
                      <option value="2012年">2012年</option>
                      <option value="2013年">2013年</option>
                      <option value="2014年">2014年</option>
                      <option value="2015年">2015年</option>
                      <option value="2016年">2016年</option>
                      <option value="2017年">2017年</option>
                      <option value="2018年">2018年</option>
                      <option value="2019年">2019年</option>
                      <option value="2020年">2020年</option>
                      <option value="2021年">2021年</option>
                      <option value="2022年" selected="">2022年</option>
                    </select>
                    <button class="btn fl  mb-10" id="ajaxConfirm">查询</button>
                  </div>
                  <a href="javascript:;" target="_self" class="save_btn toExcel">导出Excel表格</a>
                </div>
                <div id="container0" >
                </div>
                <div id="table_toExcel">
                  <table border="1" cellspacing="0" cellpadding="0" wclassth="100%" id="table1excel"></table>
                </div>
              </div>

js部分:

var globalData = null; //备份
var globalDataCopy = null; //深拷贝
var url = "./static/json/tm_sjkf_data.json";
var containerId = "container0";
var dom = $("#" + containerId);
var chartsName = $(".tab_aside_list li.current").data("name");

var deepCopy = function (obj) {
  return JSON.parse(JSON.stringify(obj));
};

$.ajax({
  type: "get",
  url: url,
  dataType: "json",
  async: false,
  success: function (json) {
    globalData = json;
    globalDataCopy = deepCopy(json);
  },
  error: function (xhr) { },
});
function createChart(
  dom,
  { titleText, subtitleText, categories, yAxis, series }
) {
  $("#DStab_mTitle").html(titleText);
  dom.highcharts({
    legend: {
      aligin: "center",
      verticalAlign: "top",
      backgroundColor:
        (Highcharts.theme && Highcharts.theme.legendBackgroundColor) ||
        "#FFFFFF",
    },
    credits: {
      enabled: false,
    },
    chart: {
      zoomType: "xy",
    },
    title: {
      text: false,
    },
    subtitle: {
      text: subtitleText,
    },
    xAxis: [
      {
        text: "年份",
        categories: categories,
        crosshair: true,
      },
    ],
    yAxis: yAxis,
    tooltip: {
      shared: true,
    },
    lang: {
      printChart: "打印图表",
      downloadPNG: "下载JPEG 图片",
      downloadJPEG: "下载JPEG文档",
      downloadPDF: "下载PDF 图片",
      downloadSVG: "下载SVG 矢量图",
      contextButtonTitle: "下载图片",
      downloadCSV: "下载CSV图片",
      downloadXLS: "下载XLS图片",
      viewData: "数据表格 ",
      openInCloud: "查看更多数据类型",
    },

    series: series,
  });
}
// 导出数据为Excel文件
function drawTable(title) {
  var yearList = dom.highcharts().options.xAxis[0].categories;
  var seriesList = dom.highcharts().options.series;
  var len = seriesList.length + 1;
  var tableDom = null;
  // tableDom += "<tr><th>" + title + "</tr></th></tr>";
  var table_th = "<th>日期</th>";

  seriesList.forEach((v, k) => {
    table_th += "<th>" + v.name + "</th>";
  });
  tableDom += "<tr>" + table_th + "</tr>";

  //内容
  yearList.forEach((v, k) => {
    tableDom += "<tr>";
    tableDom += "<td>" + v + "</td>";
    seriesList.forEach((series_v) => {
      var value = series_v.data[k] || "";
      tableDom += "<td>" + value + "</td>";
    });
    tableDom += "</tr>";
  });
  $("#table_toExcel").find("table").html(tableDom);
}

//初始化
var chart = createChart(dom, globalDataCopy[chartsName]);
// 获取对应的年份数据,改id就行
var yearList = dom.highcharts().options.xAxis[0].categories;
// 查询的点击事件 改id
$("#ajaxConfirm").click(function () {
  // 获取开始年份 改变量名 改id
  var startY = $("#startYearSpan option:selected").val();
  // 获取结束年份 改变量名 改id
  var endY = $("#endYearSpan option:selected").val();
  var startY_index = yearList.indexOf(startY);
  var endY_index = yearList.indexOf(endY) + 1;
  // 根据年份筛取更改年份数据 改id 和3个年份变量
  dom.highcharts().options.xAxis[0].categories = yearList.slice(
    startY_index,
    endY_index
  );
  var chartsName = $(".tab_aside_list li.current").data("name");

  var seriesList = globalData[chartsName].series;

  // 更改数据data
  for (let index = 0; index < seriesList.length; index++) {
    const element = seriesList[index];
    dom.highcharts().options.series[index].data = element.data.slice(
      startY_index,
      endY_index
    );
  }

  // 重新渲染图表
  chart = Highcharts.chart(containerId, dom.highcharts().options);
});

var dom_toexcel = $(".toExcel");
//导出表格
dom_toexcel.click(function () {
  var title = $("#DStab_mTitle").html();
  drawTable(title);
  var excel = new ExcelGen({
    src_id: "table1excel",
    show_header: true,
    filename: title,
    extension: "xlsx",
  });
  excel.generate();
});

json部分:

{
  "rk": {
    "titleText": "主标题",
    "subtitle": "副标题",
    "categories": [
      "2011年",
      "2012年",
      "2013年",
      "2014年",
      "2015年",
      "2016年",
      "2017年",
      "2018年",
      "2019年",
      "2020年",
      "2021年",
      "2022年"
    ],

    "yAxis": [
      {
        "labels": {
          "format": "{value}万人",
          "style": {
            "color": "Highcharts.getOptions().colors[0]"
          }
        },
        "title": {
          "text": "人口 (万人)",
          "style": {
            "color": "Highcharts.getOptions().colors[0]"
          }
        }
      }
    ],
    "series": [
      {
        "name": "户籍人口 (万人)",
        "type": "column",
        "data": [
          167, 167.42, 163.85, 164.24, 162.8, 163.36, 161.08, 160.92, 160.66,
          158.89, 158.02
        ],
        "tooltip": {
          "valueSuffix": "万人"
        }
      },
      {
        "name": "常住人口 (万人)",
        "type": "column",
        "color": "Highcharts.getOptions().colors[2]",
        "data": [
          136.9, 133.9, 128.9, 129.16, 129.2, 128.66, 128.35, 127.35, 124.74,
          115.86, 110.58, 110.74
        ],
        "tooltip": {
          "valueSuffix": "万人"
        }
      }
    ]
  }}

小结

1.引入:

  <script src="./static/js/jquery.min.js"></script>
  <script src="./static/js/highcharts.js"></script>
  <script src="./static/js/exporting.js"></script>
  <script src="./static/js/export_data.js"></script>
  <script src="./static/js/jszip.min.js"></script>
  <script src="./static/js/FileSaver.js"></script>
  <script src="./static/js/excel-gen.js"></script>

2.资源提供:

本文章有对应资源绑定

3.结果展示:

导出展示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值