根据条件查询下载Excel表单(Java+Vue 及 Vue 两种方式)

目录

  • 前言
  • 1. 基本知识
  • 2. 纯前端导入导出(Vue)
  • 3. 前后端(Vue + Java)

前言

如果想要下载好看的Excel推荐阅读:

  1. 详细讲解Java使用EasyExcel函数来操作Excel表(附实战)
  2. 详细讲解Java使用HSSFWorkbook函数导出Excel表(附实战)
  3. Python读取Excel的几种工具包(附Demo)

详细的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

此文通过后端你的查询前端,使用前端的下载参数下载!

1. 基本知识

this.$export.excel 是在 Vue.js 组件中使用的一个方法,通过 Vue.js 插件或 mixin 扩展到组件中的一个方法

主要功能是将给定的数据导出为 Excel 文件

参数包括:

  • 标题:Excel 文件的标题或名称
  • 列信息:导出的数据应该如何在 Excel 表格中排列,包括列名、宽度等
  • 数据:要导出的实际数据,可能是一个数组,每个元素代表一行数据,每行的元素按照列信息进行排列

具体作用如下:

  • 灵活性:支持不同的选项,比如自定义标题、指定列的顺序和格式、处理数据以适应 Excel 的需求等
  • 用户友好:提供一种用户友好的方式来导出数据,使用户能够以熟悉的 Excel 格式保存和处理数据,而无需手动将数据从应用程序复制粘贴到 Excel 中

2. 纯前端导入导出(Vue)

导入:

  • 自定义样式以增强界面外观。

  • 添加了 .xlsx 文件的限制,只允许选择该类型的文件进行上传。

  • 添加了一些虚拟数据,以便在没有上传文件时也可以查看表格的展示效果。

  • <style> 部分使用了 scoped,以确保样式仅在当前组件中生效,避免全局污染。

<template><div class="excel-import-demo"><el-uploadclass="upload-excel":before-upload="handleUpload"action="default"accept=".xlsx"><el-button type="primary">选择要导入的 .xlsx 表格</el-button></el-upload><div v-if="table.columns.length > 0" class="table-container"><h2>导入的数据</h2><el-table :data="table.data" :columns="table.columns"></el-table></div></div>
</template><script>
import Vue from "vue";
import pluginImport from "@d2-projects/vue-table-import";Vue.use(pluginImport);export default {data() {return {table: {columns: [],data: [],},};},methods: {handleUpload(file) {this.$import.xlsx(file).then(({ header, results }) => {// 将表头作为列的标签和属性this.table.columns = header.map((e) => {return {label: e,prop: e,};});// 演示用的虚拟数据this.table.data = [{ id: 1, name: "John", age: 30, email: "john@example.com" },{ id: 2, name: "Jane", age: 28, email: "jane@example.com" },{ id: 3, name: "Doe", age: 35, email: "doe@example.com" },];});return false;},},
};
</script><style scoped>
.excel-import-demo {max-width: 600px;margin: 0 auto;
}.upload-excel {margin-bottom: 20px;
}.table-container {margin-top: 20px;
}
</style>

导出:

<template><div class="excel-export-demo"><div class="header"><h2>数据导出为 Excel</h2></div><div class="content"><el-button @click="exportExcel" type="primary"><el-icon name="download" /> 导出为 Excel</el-button></div><div class="footer"><p>© 2024 码农研究僧</p></div></div>
</template><script>
import Vue from 'vue'
import pluginExport from '@d2-projects/vue-table-export'Vue.use(pluginExport)export default {data() {return {table: {columns: [],data: []}}},methods: {exportExcel() {this.$export.excel({columns: this.table.columns,data: this.table.data}).then(() => {this.$message('导出表格成功')})}}
}
</script><style scoped>
.excel-export-demo {max-width: 400px;margin: 0 auto;text-align: center;padding: 20px;
}.header h2 {margin-bottom: 20px;
}.footer {margin-top: 20px;font-size: 12px;
}
</style>

3. 前后端(Vue + Java)

根据前面的一个框架,大致设计一个导出Excel

通过点击按钮:

handleExcel() {this.loading = true;queryAllForExcel( Object.assign(this.getQuery()) ).then(res=>{console.log();const  column = this.option.column;const  data = res.data.data;let opt = {title: 'EXCEL 下载',column: column,data: data};console.log(opt);this.$export.excel({title: opt.title || new Date().getTime(),columns: opt.column,data: opt.data});}).finally(()=>{this.loading = false;});
},

传输的条件如下:(以下为Demo)

getQuery(){var mTime = this.formInline.maintenanceTimePicker;var aTime = this.formInline.acceptTimePicker;var js;// 多机种的多个搜索var newmodel = '';console.log(this.formInline.model);if(this.formInline.model){//添加检查for(var i=0;i<this.formInline.model.length;i++){if(i==0){newmodel=this.formInline.model[i]}else{newmodel=newmodel+'-'+this.formInline.model[i]}}}// 设备编号的多个搜索var nos = '';if(this.formInline.equipmentNo){ // 不为空的判断for(var i=0;i<this.formInline.equipmentNo.length;i++){if(i==0){nos=this.formInline.equipmentNo[i]}else{nos=nos+'-'+this.formInline.equipmentNo[i]}}}if((mTime!=null&&(mTime.length!=1))&&(aTime!=null&&(aTime.length!=1))){js = {"equipmentNos": nos,"model":newmodel,"maintenanceType":this.formInline.maintenanceType,"maintenanceStartTime":moment(mTime[0]).format('YYYY-MM-DD HH:mm:ss'),"maintenanceEndTime":moment(mTime[1]).format('YYYY-MM-DD HH:mm:ss'),"acceptStartTime":moment(aTime[0]).format('YYYY-MM-DD HH:mm:ss'),"acceptEndTime":moment(aTime[1]).format('YYYY-MM-DD HH:mm:ss'),};}else if((mTime!=null&&(mTime.length!=1))&&aTime==null){js = {"equipmentNos": nos,"model":newmodel,"maintenanceType":this.formInline.maintenanceType,"maintenanceStartTime":moment(mTime[0]).format('YYYY-MM-DD HH:mm:ss'),"maintenanceEndTime":moment(mTime[1]).format('YYYY-MM-DD HH:mm:ss'),};}else if((aTime!=null&&(aTime.length!=1))&&mTime==null){js = {"equipmentNos": nos,"model":newmodel,"maintenanceType":this.formInline.maintenanceType,"acceptStartTime":moment(aTime[0]).format('YYYY-MM-DD HH:mm:ss'),"acceptEndTime":moment(aTime[1]).format('YYYY-MM-DD HH:mm:ss'),};}else{js = {"equipmentNos": nos,"model":newmodel,"maintenanceType":this.formInline.maintenanceType,}; }console.log(js);return js;
},

前端接口如下:

export const queryAllForExcel = ( params) => {return request({url: '/api/blade-equipment/maintenanceorder/queryAllForExcel',method: 'get',params: {...params,},timeout:18000,})
}

对应后端传输的接口:

@GetMapping("/queryAllForExcel")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "查全部", notes = "传入maintenanceOrder")
public R<List<MaintenanceOrderVO>> queryAll(MaintenanceOrderVO maintenanceOrdervo) {QueryWrapper<MaintenanceOrder> maintenanceOrderQueryWrapper = new QueryWrapper<>();// 条件查询maintenanceOrderQueryWrapper = this.getWrapper(maintenanceOrdervo,maintenanceOrderQueryWrapper);List<MaintenanceOrder> maintenanceOrders = maintenanceOrderService.list(maintenanceOrderQueryWrapper);List<MaintenanceOrderVO> maintenanceOrderVOS = MaintenanceOrderWrapper.build().listVO(maintenanceOrders);return R.data(maintenanceOrderVOS);
}

对于上述条件查询主要是 MybatisPlus自我封装的一个函数,推荐阅读: 【Java项目】实战CRUD的功能整理(持续更新)

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

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

相关文章

23.基于springboot + vue实现的前后端分离-在线旅游网站系统(项目 + 论文PPT)

项目介绍 本旅游网站系统采用的数据库是MYSQL &#xff0c;使用 JSP 技术开发&#xff0c;在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 技术选型 后端: SpringBoot Mybatis 数据库 : MyS…

RK android11 user打开adb调试功能

目录build/make/core diff --git a/core/main.mk b/core/main.mk --- a/core/main.mk b/core/main.mk -280,7 280,7 ifneq (,$(user_variant)) ADDITIONAL_DEFAULT_PROPERTIES security.perf_harden1 ifeq ($(user_variant),user) - ADDITIONAL_DEFAULT_PROPER…

机器学习:原理、应用与未来展望

第一章 是什么 机器学习&#xff08;Machine Learning&#xff09;是一门跨学科的学科&#xff0c;它使用计算机模拟或实现人类学习行为&#xff0c;通过不断地获取新的知识和技能&#xff0c;重新组织已有的知识结构&#xff0c;从而提高自身的性能。机器学习涉及多个学科&am…

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…

微信小程序中使用特使字体

1、首先下载字体文件 推荐几个常用下载字体的网站 https://font.chinaz.com/zhongwenziti.html https://www.hellofont.cn/ 2、转换字体 使用下面这个网站进行字体转换 https://transfonter.org/ 点击add fonts 按钮进行上传刚刚下载的字体文件选择formats格式&#xff1a;可…

关于CSS 优先级布局应用的教程

在前端开发中&#xff0c;CSS 的优先级布局是非常重要的一部分。通过合理地应用 CSS 优先级&#xff0c;我们可以更加灵活地控制页面的布局和样式。本教程将向您介绍如何利用 CSS 优先级进行布局&#xff0c;并通过实例展示其应用。 1. 了解 CSS 优先级 在 CSS 样式表中&…

【生活】程序人生之日常生活篇(附塑料分类标志 常用日常好物)

程序员生活指南之 【生活】程序人生之日常生活篇&#xff08;附塑料分类标志 & 常用日常好物&#xff09; 文章目录 1、关于本文2、居家相关2.1 蟑螂大战2.2 房间收纳&#xff08;寝室&#xff0c;租房&#xff0c;家里&#xff09;2.3 智能家居2.4 台灯选购2.5 塑料分类标…

深圳mes系统在智能制造中的重要意义

深圳mes系统在生产中具有重要意义&#xff0c;主要体现在以下几个方面&#xff1a; 生产计划可视化和优化&#xff1a;MES系统通过大量收集和分析工厂内部的实时数据&#xff0c;将数据可视化展示给运营和管理层&#xff0c;使企业决策者能够更加有效地进行生产计划的制定和…

高级优化理论与方法(二)

高级优化理论与方法&#xff08;二&#xff09; 上节回顾ConstrainedUnconstrainedFONCSONCexample 这节课的内容SOSC定理叙述证明例子 One-dimensional Search MethodsIterative MethodGolden Section SearchMethodIssues方法推理算法描述TimeExample Fibonacci MethodBisecti…

教师观包括哪些内容是什么

站在讲台上的老师&#xff0c;除了教你知识&#xff0c;还有哪些不为人知的角色和面孔&#xff1f;让我们一起揭开教师观的神秘面纱&#xff0c;看看老师们的“千面人生”。 现代教师已不再是单纯的知识传递者&#xff0c;他们更像是学习旅程中的导游和指南针。他们引导学生发现…

嵌入式Qt 对话框及其类型 QDialog

一.对话框的概念 对话框是与用户进行简短交互的顶层窗口。 QDialog是Qt中所有对话框窗口的基类。 QDialog继承与QWidfet是一种容器类型的组件。 QDialog的意义&#xff1a; QDialog作为一种专业的交互窗口而存在。 QDialog不能作为子部部件嵌入其他容器中。 QDialog是定制…

反函数的理解|反函数到底“反”的是什么?什么是反函数?

理解 将 yex 函数图像连同整个坐标系绕着 yx 旋转 180 度&#xff0c;会变成下面的图像 只是把图像转了一下&#xff0c;函数还是那个函数&#xff0c;还是 yex &#xff0c;此时横轴变成了 y 轴&#xff0c;纵轴变成了 x 轴 根据习惯&#xff0c;一般把纵轴当作因变量、把横轴…

如何在腾讯云轻量应用服务器上安装Docker的详细步骤是什么?

如何在腾讯云轻量应用服务器上安装Docker的详细步骤是什么&#xff1f; 登录腾讯云轻量应用服务器&#xff1a;首先&#xff0c;需要登录到腾讯云官方网站&#xff0c;并进入轻量应用服务器控制台。 软件源设置&#xff1a;在轻量应用服务器控制台中选择“更多”>“设置”&…

JavaScript实现的计时器效果

之前做过电商网站倒计时的效果&#xff0c;今天在倒计时的基础上&#xff0c;把代码修改了一下&#xff0c;改为计时器效果&#xff0c;实现了以下功能&#xff1a; 1.点击“开始”后&#xff0c;按秒计时且“开始”文字变为“停止”&#xff1b; 2.点击“停止”&#xff0c;计…

https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图

http 和 https 的区别 http 是明文传输&#xff0c;敏感信息容易在传输过程中被劫持https http加密&#xff0c;劫持了也无法解密 https 用到的加密方式 https 同时使用了对称加密和非对称加密&#xff0c;之所以没有全部使用非对称加密&#xff0c;是因为非对称加密的运算更加…

JavaScript:export 和 export default

文章目录 exportexport defaultexport 和 export default都使用 在JavaScript ES6的模块系统中&#xff0c;export 和 export default 都是用来导出模块中对外可见的变量、函数、类或对象的语法&#xff0c;但是它们的作用和使用方式有所不同&#xff1a; export export 关键字…

四种垃圾回收算法

1.标记清除算法 该算法先标记&#xff0c;后清除&#xff0c;将所有需要回收的算法进行标记&#xff0c;然后清除&#xff1b;这种算法的缺点是&#xff1a;效率比较低&#xff1b;标记清除后会出现大量不连续的内存碎片&#xff0c;这些碎片太多可能会使存储大对象会触发GC回…

【设计模式】观察者模式及函数式编程的替代C++

本文介绍观察者模式以及使用函数式编程替代简单的策略模式。 观察者模式 观察者模式是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 当对象间存在一对多关系时&#…

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题 一、Bean的作用域1.singleton2.prototype3.其他scope值 二、Bean的实例化方式1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的区别…

【大厂AI课学习笔记NO.60】(13)模型泛化性的评价

我们学习了过拟合和欠拟合&#xff0c;具体见我的文章&#xff1a;https://giszz.blog.csdn.net/article/details/136440338 那么今天&#xff0c;我们来学习模型泛化性的评价。 泛化性的问题&#xff0c;我们也讨论过了&#xff0c;那么如何评价模型的泛化性呢&#xff1f; …