当前位置: 首页 > news >正文

ECharts与Excel的结合实战

引言:本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花,从Excel读取数据然后在ECharts上展示。

1.柱状图前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>echarts-bar</title><script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script><script src="js/echarts.min.js"></script><script src="../../plugins/element-ui/index.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width:2000px; height:700px;"></div><button onclick="generateExcel()">导出Excel文件</button>
<script type="text/javascript">function generateExcel() {fetch('http://localhost:8080/backend/page/eChart/excel').then(response => response.json()).then(data => {const url = window.URL.createObjectURL(new Blob([data]));const a = document.createElement('a');a.href = url;a.download = '菜品销量.xlsx'; // 你可以根据需要设置文件名a.click();});}// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));// 指定图表的配置项和数据myChart.setOption({title: {text: '菜品销售情况柱形图'},tooltip: {},legend: {data: ['销量']},xAxis: {data: [],axisLabel: {interval: 0}},yAxis: {},series: [{name: '销量',type: 'bar',data: [],itemStyle: {color: '#91cc75',shadowColor: '#91cc75',borderType: 'dashed',opacity: 0.5,borderWidth:1},}]});myChart.showLoading();var names = [];    //类别数组(实际用来盛放X轴坐标值)var nums = [];    //销量数组(实际用来盛放Y坐标值)$.ajax({type: "get",async: false,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url: "list",    //请求发送到TestServlet处data: {},dataType: "json",        //返回数据形式为jsonsuccess: function (result) {//请求成功时执行该函数内容,result即为服务器返回的json对象var data = result.data;console.log(data);if (data) {for (var i = 0; i < data.length; i++) {names.push(data[i].name);    //挨个取出类别并填入类别数组}for (var i = 0; i < data.length; i++) {nums.push(data[i].count);    //挨个取出销量并填入销量数组}myChart.hideLoading();    //隐藏加载动画myChart.setOption({        //加载数据图表xAxis: {data: names},series: [{// 根据名字对应到相应的系列name: '销量',data: nums}]});}},error: function () {//请求失败时执行该函数alert("图表请求数据失败!");myChart.hideLoading();}})
</script>
</body>
</html>

2.饼图前端代码

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org" style="height: 100%">
<head><meta charset="utf-8"><title>echarts-pie</title><script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script><script src="js/echarts.min.js"></script>
</head>
<body style="height: 100%; margin: 0">
<div id="main" style="height: 100%"></div>
<button onclick="generateExcel()">导出Excel文件</button><script type="text/javascript">function generateExcel() {fetch('http://localhost:8080/backend/page/eChart/excel').then(response => response.json()).then(data => {const url = window.URL.createObjectURL(new Blob([data]));const a = document.createElement('a');a.href = url;a.download = '菜品销量.xlsx'; // 你可以根据需要设置文件名a.click();});}var mychart1 = echarts.init(document.getElementById('main'));mychart1.setOption({title: {text: '菜品销量统计饼状图',left: 'center'},tooltip: {trigger: 'item'},legend: {orient: 'vertical',left: 'left'},series: [{name: 'Access From',type: 'pie',radius: '50%',data: []}],emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}});mychart1.showLoading();var names=[];var nums=[];$.ajax({type : "get",async : false,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url : "list",    //请求发送到TestServlet处data : {},dataType : "json",        //返回数据形式为jsonsuccess : function(result) {//请求成功时执行该函数内容,result即为服务器返回的json对象var data = result.data;if (data) {for(var i=0;i<data.length;i++){names.push(data[i].name);    //挨个取出类别并填入类别数组nums[i] = {value: data[i].count,name:data[i].name};}/*          for(var i=0;i<data.length;i++){nums.push(data[i].count);    //挨个取出销量并填入销量数组}*/mychart1.hideLoading();    //隐藏加载动画mychart1.setOption({        //加载数据图表series: {type: 'pie',radius: '55%',center: ['50%','60%'],data: nums,emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgb(0,0,0,0.5)'}}},});}},error : function() {//请求失败时执行该函数alert("图表请求数据失败!");mychart1.hideLoading();}})window.addEventListener('resize', mychart1.resize);
</script>
</body>
</html>

3.后端通用代码

3.1生成Excel表格

 @RequestMapping(value = "excel", method = RequestMethod.GET)public R<String> getExcel(){File file = new File(path);QueryWrapper<Dish> wrapper = new QueryWrapper<>();wrapper.select("name", "count");List<Dish> list = dishService.list(wrapper);ArrayList<Map<String, Object>> rows = new ArrayList<>();for (Dish dish : list) {Map<String, Object> row = new LinkedHashMap<>();row.put("菜品", dish.getName());row.put("销量", dish.getCount());rows.add(row);}// 通过工具类创建writerExcelWriter writer = ExcelUtil.getWriter(path);// 合并单元格后的标题行,使用默认标题样式writer.merge(1 ,"菜品销量统计");// 一次性写出内容,使用默认样式,强制输出标题writer.write(rows,true);// 关闭writer,释放内存writer.close();r.setCode(1);r.setData("文件导出成功");return r;}

3.2Excel表格数据导入ECharts

        public static final String path = "D:\\java\\excel\\test.xlsx"; File file = new File(path);FileInputStream input = new FileInputStream(file);MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));// 1.获取上传文件输入流InputStream inputStream = null;inputStream = multipartFile.getInputStream();// 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheetExcelReader excelReader = ExcelUtil.getReader(inputStream, "sheet1");// 可以加上表头验证// 3.读取第二行到最后一行数据//List<List<Object>> read = excelReader.read(1, excelReader.getRowCount());return excelReader.readAll();

相关文章:

ECharts与Excel的结合实战

引言&#xff1a;本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花&#xff0c;从Excel读取数据然后在ECharts上展示。 1.柱状图前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…...

UDP的特点及应用场景

目录 UDP特点 应用场景 总结 User Datagram Protocol&#xff08;UDP&#xff0c;用户数据报协议&#xff09;是互联网协议套件中的一种传输层协议。与TCP不同&#xff0c;UDP是一种无连接的、不可靠的协议。 UDP特点 要知道UDP可以用来做什么&#xff0c;首先我们要知道它…...

Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新

前言 本篇博客是python开发的工具篇相关&#xff0c;介绍pycharm的使用和相关配置&#xff0c;收录python的相关操作&#xff0c;比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…...

【深度学习】卷积神经网络结构组成与解释

卷积神经网络是以卷积层为主的深度网路结构&#xff0c;网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积&#xff08;元素相乘再求和&#xff09;的操作。 1. 卷积层 常见的卷积操作如下&#xff1a; 卷积操作解释图解标准卷…...

从源码解析Containerd容器启动流程

从源码解析Containerd容器启动流程 本文从源码的角度分析containerd容器启动流程以及相关功能的实现。 本篇containerd版本为v1.7.9。 更多文章访问 https://www.cyisme.top 本文从ctr run命令出发&#xff0c;分析containerd的容器启动流程。 ctr命令 查看文件cmd/ctr/comman…...

引迈-JNPF低代码项目技术栈介绍

从 2014 开始研发低代码前端渲染&#xff0c;到 2018 年开始研发后端低代码数据模型&#xff0c;发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示&#xff1a; 1. 项目前后端分离 前端采用Vue.js&#xff0c;这是一种流行的前端JavaScript框架&a…...

如何处理枚举类型(下)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上一篇我们通过编写MyB…...

wsj0数据集原始文件.wv1.wv2转换成wav文件

文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 ​ 最近做语音分离实验需要用到wsj0-2mix数据集&#xff0c;但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后&#xff0c;由于原始的语音文件后缀是wv1或…...

Flask Session 登录认证模块

Flask 框架提供了强大的 Session 模块组件&#xff0c;为 Web 应用实现用户注册与登录系统提供了方便的机制。结合 Flask-WTF 表单组件&#xff0c;我们能够轻松地设计出用户友好且具备美观界面的注册和登录页面&#xff0c;使这一功能能够直接应用到我们的项目中。本文将深入探…...

【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现

文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中&#xff0c;包括表的定义、分区、表的属性等信息。 hi…...

C#开发的OpenRA游戏之属性SelectionDecorations(13)

C#开发的OpenRA游戏之属性SelectionDecorations(13) 在前面分析SelectionDecorations属性类时,会发现它有下面这个属性: public class SelectionDecorations : SelectionDecorationsBase, IRender { readonly Interactable interactable; 它是定义了一个Interactabl…...

接手了一个外包开发的项目,我感觉我的头快要裂开了~

嗨&#xff0c;大家好&#xff0c;我是飘渺。 最近&#xff0c;我和小伙伴一起接手了一个由外包团队开发的微服务项目&#xff0c;这个项目采用了当前流行的Spring Cloud Alibaba微服务架构&#xff0c;并且是基于一个“大名鼎鼎”的微服务开源脚手架&#xff08;附带着模块代…...

git常规使用方法,常规命令

Git是一种分布式版本控制系统&#xff0c;它可以记录软件的历史版本&#xff0c;并提供了多人协作开发、版本回退等功能。以下是Git的基本使用方法&#xff1a; 安装Git&#xff1a;下载安装包并进行安装&#xff0c;安装完成后在命令行中输入 git --version 进行验证。 初始化…...

【JavaScript】3.3 JavaScript工具和库

文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中&#xff0c;会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码&#xff0c;提高工作效率。在本章节中&#xff0c;我们将探讨一些常见的 JavaScript 工具和库&…...

开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润

这样做的优点&#xff1a; 1.不用每个人都问chatGPT同样的问题。 2.已经生成的&#xff0c;反应快速。 3.内容分析的客观&#xff0c;真实&#xff0c;基于数据&#xff0c;无法造假。 4.无其它目的这种基于 ChatGPT 分析热点事件并生成文章的网站&#xff0c;可以通过多种方式…...

龙迅LT8668SXC适用于TPYE-C/DP/HDMI转EDP/VBO同时环出一路HDMI/DP,支持分辨率缩放功能。

1.描述 应用功能&#xff1a;LT8668SXC适用于TYPE-C/DP1.4/HDMI2.1转EDP/VBO同时环出一路HDMI/DP应用方案 分辨率&#xff1a;高达8K30HZ&#xff0c; 工作温度范围&#xff1a;−40C to 85C 产品封装&#xff1a;QFN88 (10*10)最小包装数&#xff1a;1680pcs 2.产品应用 •视频…...

跳板机原理

跳板机原理 跳板机&#xff08;Jump Server&#xff09;是一种网络安全设备或计算机&#xff0c;用于管理和保护内部网络中的其他计算机或系统。跳板机通常位于内部网络和外部网络之间&#xff0c;充当连接这两个网络的中间节点或跳板。以下是跳板机的主要功能和用途&#xff1…...

璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品&#xff0c;凭借优秀的产品技术能力&#xff0c;通过评估后&#xff0c;入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图&#xff08;2023&#xff09;》的工业数字化领域。 “铸基计划”是中国信通院…...

1146. 新的开始,prim算法,超级原点

发展采矿业当然首先得有矿井&#xff0c;小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井&#xff0c;但他似乎忘记了考虑矿井供电问题。 为了保证电力的供应&#xff0c;小 FF 想到了两种办法&#xff1a; 在矿井 i 上建立一个发电站&#xff0c;费用为 vi&…...

HTTP常见响应码

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是用于在客户端和服务器之间传输资源的协议。HTTP响应码&#xff08;HTTP status code&#xff09;用来表示服务器对请求的处理结果。以下是常见的HTTP响应码及其概要&#xff1a; 1. 响应码大类&#xff1a; 主要分…...

告别手动翻找!用Python+uiautomation批量导出微信好友备注(附完整源码)

Pythonuiautomation实现微信好友数据自动化导出实战指南 微信作为国民级社交应用&#xff0c;积累了海量社交关系数据。对于微商、社群运营者或个人知识管理者而言&#xff0c;如何高效整理这些数据成为刚需。本文将带你用Pythonuiautomation打造一个全自动微信好友数据导出工具…...

产教融合共建失智老年人照护实训室实践路径

本文围绕产教融合模式&#xff0c;结合失智老年人照护岗位实际需求&#xff0c;从合作机制、空间布局、设备配置、教学实施、运营保障五个核心维度&#xff0c;给出可落地的失智老年人照护实训室共建实践路径&#xff0c;兼顾实用性与可操作性&#xff0c;助力院校与企业高效共…...

前端加密的隐秘陷阱:Crypto-JS与JSEncrypt常见误用与解决方案

前端加密的隐秘陷阱&#xff1a;Crypto-JS与JSEncrypt常见误用与解决方案 1. 密钥管理的致命疏忽 在项目评审中&#xff0c;我经常发现开发者将加密密钥直接硬编码在JavaScript文件里。这种看似方便的做法实际上让加密形同虚设——攻击者只需查看源代码就能获取密钥&#xff0c…...

副业月入五万:软件测试从业者的知识变现全路径

引言&#xff1a;测试人的职业新机遇在AI重构技术生态的2026年&#xff0c;软件测试工程师正站在职业转型的黄金节点。行业数据显示&#xff0c;76%的资深测试人员通过副业实现收入倍增&#xff0c;其中15%的顶尖者突破月入五万门槛。本指南从专业视角拆解四大变现路径&#xf…...

Cuvil如何让PyTorch推理成本直降42%?揭秘LLM服务中被忽略的编译器级TCO压缩术

第一章&#xff1a;Cuvil编译器在Python AI推理中的应用Cuvil 是一款面向AI推理场景设计的轻量级领域专用编译器&#xff08;DSL Compiler&#xff09;&#xff0c;专为将Python中基于NumPy/TensorFlow/PyTorch的模型前向逻辑高效编译为目标硬件指令而构建。它不替代完整框架&a…...

抖音无水印下载器终极指南:免费批量保存视频、图集与直播回放

抖音无水印下载器终极指南&#xff1a;免费批量保存视频、图集与直播回放 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

Linux设备驱动 -- RTC驱动移植DS1339

查看原理图RTC芯片采用的是DS1339芯片&#xff0c;这是达拉斯半导体公司的一款RTC芯片&#xff0c;使用I2C接口。 芯片接在RK3568的I2C5。 Linux内核支持DS1339 检索linux内核是否支持DS1339芯片驱动。 通过搜索可知到&#xff0c;Linux系统内核中已有达拉斯DS1339的驱动&#…...

Visio绘制Pixel Couplet Gen系统架构图:从请求到响应的全链路设计

Visio绘制Pixel Couplet Gen系统架构图&#xff1a;从请求到响应的全链路设计 1. 为什么需要绘制系统架构图 在开发Pixel Couplet Gen这样的AI生成系统时&#xff0c;一个清晰的架构图就像建筑师的蓝图。它能帮助团队成员理解系统各组件如何协同工作&#xff0c;特别是在星图…...

比迪丽LoRA模型参数深度解析:从CFG Scale到Clip Skip的调参实战

比迪丽LoRA模型参数深度解析&#xff1a;从CFG Scale到Clip Skip的调参实战 如果你已经能用比迪丽LoRA模型生成不错的图片&#xff0c;但总觉得效果差点意思——要么风格不够对味&#xff0c;要么细节不够精致&#xff0c;或者就是感觉“不够像”——那么恭喜你&#xff0c;来…...

PLIC中断控制器深度解析:手把手实现RISCV多核中断调度(含设备树配置)

PLIC中断控制器深度解析&#xff1a;手把手实现RISCV多核中断调度&#xff08;含设备树配置&#xff09; 在物联网设备开发中&#xff0c;高效的中断处理机制往往是系统稳定性的关键。想象一下&#xff0c;当你设计的智能网关需要同时处理数十个传感器的数据流时&#xff0c;如…...