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.结果展示:

导出展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/168221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C编译环境和预处理(非常详细,建议收藏)

C编译环境和预处理&#xff08;非常详细&#xff0c;建议收藏&#xff09; 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么&#xff1f; 2.2 运行环境 三、预处理详解3.1 预定义…

安卓主板_MTK安卓一体机方案定制

安卓一体机主板集成多媒体解码、3G&#xff08;4G/5G可选&#xff09;模块&#xff0c;GPS&#xff0c;液晶驱动、WIFI、蓝牙、串口于一体&#xff0c;支持绝大部分当前流行的视频及图片格式解码。支持MIPI接口的1280*720分辨率的显示屏&#xff0c;最大支持1280*720P解码。大大…

海外代理IP如何找到靠谱的?

现在市面上有很多代理服务商&#xff0c;大家可以根据自己的需求选择一个适合自己业务的的IP代理服务商&#xff0c;现在也有一些免费的&#xff0c;但如果力求稳定安全&#xff0c;还是选择付费的。 这里提醒一句&#xff0c;在买代理IP时最好找这种可以免费试用的&#xff0…

Axure RP Pro 8 mac/win中文版:打造无限可能的原型设计工具

在如今的数字化时代&#xff0c;原型设计工具越来越受到设计师和产品经理们的重视。而Axure RP Pro8作为一款强大的原型设计工具&#xff0c;成为了众多专业人士的首选。 首先&#xff0c;Axure RP Pro8具备丰富的功能。它提供了多种交互元素和动画效果&#xff0c;使得用户可…

文件加密软件哪个好丨2023年最值得收藏的6款文件加密软件

文件加密软件哪个好&#xff1f; 在这个安全事件频发的时代&#xff0c;信息安全、文件安全已成为很多人关注的话题。不管是电脑还是手机&#xff0c;都需要重视文件加密这个话题。 那今天就推荐6款最值得收藏的文件加密软件&#xff0c;并分析其中的优缺点。 一、电脑加密软…

WhatsApp新营销全解:如何才能真正留住你的客户

WhatsApp营销这件事上&#xff0c;从获取线索、留存客户、成交转化到复购推荐的整个流程中&#xff0c;方方面面的因素影响着最终的转化效果。今天开始&#xff0c;我们会在公众号内新增WhatsApp新营销全解系列&#xff0c;结合前人踩过的坑和成功经验&#xff0c;来为大家说说…

苹果手机内嵌h5如何禁止全局弹性效果

简单模拟一个场景&#xff0c;这是一个商城的商品分类页面&#xff0c;是一个左右布局&#xff0c;左面是所有的分类&#xff0c;右面是展示这个分类的商品&#xff0c;这里为了简单就只写一个demo了。 <!DOCTYPE html> <html lang"en"><head><…

关于代码混淆,看这篇就够了

​ 代码混淆一.基本概念java的bytecode很容易通过JAD等反编译工具还原出源代码。这样势必不满足安全的定义。如何一定程度上保护需要防止被反编译的源代码呢&#xff1f;混淆&#xff08;obfuscate&#xff09;技术。注意&#xff1a;用obfuscate防盗版是根本不可能&#xff0c…

超长圆钢在线直线度检测 告别手工测量时代

圆钢的直线度指的是它的表面形状是否呈现出直线。直线度是圆钢的重要品质要求之一&#xff0c;与其物理性能密切相关。在工业制造中&#xff0c;如果圆钢的直线度不达标&#xff0c;就会影响其后续的加工和使用效果&#xff0c;严重时甚至会造成损失。 超长圆钢的检测&#xff…

预包装食品备案与食品经营许可证两者的关系

在食品行业中&#xff0c;预包装食品备案和食品经营许可证是两个重要的概念。它们之间存在一定的关系&#xff0c;但又不完全相同。本文将详细介绍两者的定义、区别和联系。 一、预包装食品备案 预包装食品备案&#xff0c;是指对预包装食品的生产者或进口商进行备案登记的一种…

SpringDoc基础配置和集成OAuth2登录认证教程

本期内容 学会通过注解和Java代码的方式添加SpringDoc配置。在swagger-ui提供的页面上提供OAuth2登录认证&#xff0c;在集成Security的情况下便捷获取access_token并在请求时按照OAuth2规范携带。 为什么集成OAuth2登录认证&#xff1f; 现在大部分教程是在swagger-ui页面添…

远程数据采集继电器RTU如何应用在智能电动汽车充电桩

远程数据采集继电器&#xff08;Remote Terminal Unit&#xff0c;RTU&#xff09;在智能电动汽车充电桩中的应用&#xff0c;可以为充电桩系统提供更高效、安全和可靠的远程监控与控制功能。下面将详细说明RTU在智能电动汽车充电桩中的应用。 远程监控功能&#xff1a; RTU可以…

一份WhatsApp矩阵账号营销模式全解,有你不知道的玩法吗?

将WhatsApp营销践行到底&#xff0c;是傲途针对海外Social营销一直在做的事。在WhatsApp全球营销范围越来越广泛、营销模式越来越深入的当下&#xff0c;我们也在实践中积累了一套比较系统而全面的差异化矩阵营销模式&#xff0c;帮助大中小不同类型企业获得了有价值的结果。 …

前后端黄金组合:Django+Vue+Element UI,助你构建完美平台!

这是一篇什么文章&#xff1f; 一篇你对测试开发工作感兴趣&#xff0c;想了解系统工作逻辑的文章。 一篇是你在开始动手搭建环境前需要了解各工具原理的文章。 这是一篇你真正开始前需要查阅的文章。 本文介绍了前后端工作原理&#xff0c;前后端搭建的流程、搭建过程中需…

使用 Amazon VPS 探索存储选项:实用指南

文章作者&#xff1a;Libai 在这个数字化时代&#xff0c;云计算已经成为了企业的必需品&#xff0c;它为我们带来了可扩展性、灵活性和成本效益。作为一家领先的云服务提供商&#xff0c;亚马逊网络服务&#xff08;Amazon Web Services&#xff09;提供了各种各样的服务&…

当绿色积分合法化遇上消费增值,会擦出什么样的火花!

亲爱的消费者朋友们&#xff0c;你们好&#xff01;今天我要向你们揭示一种全新的消费理念——消费增值&#xff0c;让每一次消费都变得更有价值&#xff01; 在传统的消费观念中&#xff0c;我们仅仅用金钱购买物品或享受服务&#xff0c;然后这些物品和服务便从我们的生活中消…

高压功率放大器有什么作用和用途

高压功率放大器是一种专门用于放大高电压和高功率信号的电子器件&#xff0c;其主要作用是将输入信号放大到足够的范围内&#xff0c;以便后续电路进行进一步处理。在工业、医疗、军事等领域中&#xff0c;高压功率放大器有着广泛的应用。 下面介绍几个高压功率放大器的应用场景…

数据结构与算法之美学习笔记:23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?

目录 前言树&#xff08;Tree&#xff09;二叉树&#xff08;Binary Tree&#xff09;二叉树的遍历解答开篇 & 内容小结 前言 本节课程思维导图&#xff1a; 前面我们讲的都是线性表结构&#xff0c;栈、队列、链表等等。今天我们讲一种非线性表结构&#xff0c;树。问题&…

el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素&#xff08;Elementui&#xff09;四、代码部分 一、效果图 二、使用场景 &#x1f6c0;el-form 表单内嵌套el-table表格 &#x1f6c0;el-table 表格内又嵌套el-table表格 三、所用组件元素&#xff08;Elementui&#xff…
最新文章