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部分:

标题

统计周期=:
导出Excel表格

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 += "" + title + "";
  var table_th = "日期";

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

  //内容
  yearList.forEach((v, k) => {
    tableDom += "";
    tableDom += "" + v + "";
    seriesList.forEach((series_v) => {
      var value = series_v.data[k] || "";
      tableDom += "" + value + "";
    });
    tableDom += "";
  });
  $("#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.引入:

  
  
  
  
  
  
  

2.资源提供:

本文章有对应资源绑定

3.结果展示:

excel-gen.js 导出excel 功能_第1张图片

导出展示:

excel-gen.js 导出excel 功能_第2张图片

你可能感兴趣的:(js实战篇,jQuery,javascript)