excel-gen.js 导出excel 功能

news2024/9/23 9:35:04

目录

概要

整体架构流程

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.coloradmin.cn/o/1230287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

彻底删除的文件如何恢复?分享正确方法!

“求救&#xff01;我在清理电脑的过程中&#xff0c;把一些比较久远的文件彻底删除了。但是我突然想起好像有些非常重要的数据也一同被删掉了&#xff0c;这可怎么办&#xff1f;有方法恢复彻底删除的文件么&#xff1f;” 在日常使用电脑的过程中&#xff0c;很多用户或许都会…

海外IP代理如何助力跨境电商?

黑五作为下半年年度尤为重要的一个节日&#xff0c;是各大商家的必争之地&#xff0c;那么海外代理是如何帮助跨境商家做好店铺管理和营销呢&#xff1f; 为什么跨境人都关注海外代理&#xff0c;下面我们来进行介绍。 一、什么是海外代理 海外代理就是我们所说的&#xff1a…

如何写好一篇软文?怎样写软文比较有吸引力?

软文&#xff0c;即柔性广告&#xff0c;是一种通过文字、图片等形式&#xff0c;将广告信息融入到内容中&#xff0c;以达到宣传、推广、营销目的的文章。企业和品牌每天都会在互联网上投放大量软文&#xff0c;软文起到润物细无声的作用&#xff0c;可以在无形中影响用户心智…

手写promis(1)

目录 前言 核心功能--构造函数 核心功能--状态及原因 then方法 成功和失败回调 异步及多次调用 异步任务--核心api Promise.then: queueMicrotask: MutationObserver: setImmediate: setTimeout: 异步任务---函数封装 前言 Promise&#xff08;承诺&#xff09;…

虾皮台湾站点如何选品

在互联网时代&#xff0c;电商平台成为了越来越多人购物的首选。虾皮作为台湾地区最大的电商平台之一&#xff0c;为商家提供了良好的销售渠道。然而&#xff0c;在虾皮上选择适合的商品对于商家来说并不容易。本文将介绍如何通过虾皮选品工具-知虾来查看台湾地区各大类目的热销…

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

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

scapy No such device exists (No such device exists)

使用python编写一个小的网络程序时&#xff0c;程序如下&#xff1a; import scapy.all as scapydef scan(ip):arp_request ARP(pdstip)arp_request.show()broadcast scapy.Ether(dst "ff:ff:ff:ff:ff:ff")arq_request_broadcast broadcast/arp_requestanswered,…

5.什么是Spring的依赖注入(DI)?IOC和DI的区别是什么

很多人把IOC和DI说成一个东西&#xff0c;笼统来说的话是没有问题的&#xff0c;但是本质上还是有所区别的,希望大家能够严谨一点&#xff0c; IOC和DI是从不同的角度描述的同一件事&#xff0c;IOC是从容器的角度描述&#xff0c;而DI是从应用程序的角度来描述&#xff0c;也…

kernel32.dll丢失都有什么解决办法,帮助大家解决kernel32.dll丢失的问题

kernel32.dll丢失是电脑中常出现的情况&#xff0c;今天就想和大脚聊聊这个kernel32.dll 文件&#xff0c;这个文件它的功能是干什么的&#xff0c;如果电脑中kernel32.dll 丢失都有什么解决办法&#xff0c;帮助大家解决kernel32.dll丢失的问题&#xff0c;本篇文章给大家提供…

LINUX入门篇【7】--git提交指令以及代码调试工具gdb

前言&#xff1a; 我们今天来介绍一下我们工具篇的最后两个工具&#xff0c;即git提交指令以及代码调试工具gdb,再结合前面的知识点&#xff0c;我们就可以基本完成我们VS上的基本的功能&#xff1a;编写&#xff0c;调试&#xff0c;编译&#xff0c;执行程序的这些过程。 1…

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

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

为什么要建设渲染私有云?

生活中&#xff0c;其实各行各业都离不开渲染技术。建筑行业需要进行场景的渲染&#xff0c;以展示设计方案的效果&#xff1b;工业设计需要进行产品的渲染&#xff0c;以展示产品的外观和设计特点&#xff1b;游戏开发需要进行大量的游戏场景渲染&#xff0c;以测试游戏的视觉…

App性能测试工具Soloπ(四)---性能测试

一、性能测试录制 前提&#xff1a;手机已连接电脑&#xff0c;并已开启可调试及获取各种权限点击性能测试&#xff0c;进入性能数据监控项 如需开启启动耗时计算&#xff0c;进入录屏设置无需修改默认项 勾选监测项后则点击开始按钮&#xff08;绿色小三角&#xff09;进行…

nginx 代理接口报404 问题排查

今天遇到一个nginx代理后端接口请求报404的问题&#xff0c;问题是这样的&#xff0c;后端由于服务器没有环境&#xff0c;但是需要和前端联调&#xff0c;于是采用cpolar内网穿透的方式&#xff0c;穿出来了。但是前端请求跨域&#xff0c;于是前端用nginx代理了一下后端接口&…

面试官:你能说说常见的前端加密方法吗?

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 前言 本篇文章略微介绍一下前端中常见的加密算法。前端中常见的加密算法主要形式包括——哈希函数&#xff0c;对称…

Node.js之http模块

http模块是什么&#xff1f; http 模块是 Node,js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法&#xff0c;就能方便的把一台普通的电脑&#xff0c;变成一台Web 服务器&#xff0c;从而对外提供 Web 资源服务。 如果我们想在node…

Qt http

文章目录 前言1. 定义的接口2.connect信号槽3. get4. get 下载文件5. post 总结 前言 /* 1.请求报文&#xff1a; 请求报文是由客户端发送给服务器&#xff0c;用于请求特定资源或执行特定操作。它由以下几个部分组成&#xff1a; 请求行&#xff1a;描述了请求的方法、目标资源…

josef约瑟 闭锁继电器 LB-7DG 100V 50HZ 导轨安装

LB-7型闭锁继电器 闭锁继电器LB-7导轨安装 一、用途 LB-7型闭锁继电器(以下简称继电器)用于发电厂及变电所内高压母线带电时防止和接地刀闸。 二、结构和工作原理 1、继电器按整流式原理构成&#xff0c;该继电器由变压器、电阻器、整流桥、滤波电容、极化继电器及指示灯组…

关于漏洞:检测到目标SSL证书已过期【原理扫描】

这个漏洞是监听443端口的&#xff0c;如果我们是正式的网站且使用了https那么更新证书即可。 但是我的服务器上面几乎是个空服务器&#xff0c;谁会用443呢&#xff1f; 找不到谁用了那我就部署一个nginx&#xff0c;用nginx代理443&#xff0c;找个证书配一下呗。 然而当我…