使用easyexcel填充模板数据,并导出excel

news2024/11/18 13:36:27

文章目录

  • 前言
  • 一、制作模板
  • 二、前端代码
  • 三、后端代码
  • 总结


前言

导出excel功能非常场景,本片文章记录如何使用模板填充数据后再导出。因直接导出excel数据样式不符合要求,所以做了模板填充然后再导出excel。
效果如下:
在这里插入图片描述


一、制作模板

注意:列表数据变量名前面要写点{.id},如果单条数据可以不写。
在这里插入图片描述

二、前端代码

使用表单提交:

<% layout('/layouts/default.html', {title: '导出信用用户', libs: ['validate','fileupload']}){ %>
<style type="text/css">
	.delete {
		display: none;
	}
</style>
<div class="main-content">
	<div class="box box-main">
		<div class="box-header with-border">
			<div class="box-tools pull-right">
				<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
			</div>
		</div>
		<#form:form id="inputForm" model="${cshopUser}" action="${ctx}/shop/user/cshopUser/download" method="post" class="form-horizontal">
			<div class="box-body">
				<div class="row">
					<div class="col-xs-12">
						<div class="form-group">
							<label class="control-label col-sm-2"><span class="required">*</span>${text('请选择村庄')}</label>
							<div class="col-sm-10">
								<#form:treeselect id="office" title="乡镇/村庄选择"
								path="office.officeCode" labelPath="office.officeName"
								url="${ctx}/sys/office/treeData"
								class="required" allowClear="true"/>
							</div>
						</div>
					</div>
				</div>
				<div class="box-footer">
					<div class="row">
						<div class=" text-center">
							<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit">${text('导出用户')}</button>&nbsp;
							<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button>
						</div>
					</div>
				</div>
		</#form:form>
	</div>
</div>
<% } %>
<script>
$("#inputForm").validate({
	submitHandler: function(form){
		js.ajaxSubmitForm($('#inputForm'), {
			url:'${ctx}/shop/user/cshopUser/daochu',
			downloadFile:true
		});
    }
});
</script>

三、后端代码

实体代码:

@Data
public class BianGengExcel {
    @ExcelProperty(value = "ID")
    private String id;
    @ExcelProperty(value = "姓名")
    private String name;
    @ExcelProperty(value = "手机号")
    private String phone;

}

controller代码:


    /**
     * 导出用户
     *
     * @param cshopUser
     * @return
     */
    @PostMapping(value = "daochu")
    public String daochu(@Validated CshopUser cshopUser,
                         HttpServletResponse response) {
        List <BianGengExcel> data = cshopUserService.daochu(cshopUser);
        try {
            OutputStream out = response.getOutputStream();
            //文件名需要这样写,不能在setHeader直接写中文名,否则下载的文件名字为空,只有后缀
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            String fileName = URLEncoder.encode("用户-"+System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            String templateFileName = this.getClass().getResource("/static/moban/daochu_moban.xls").getPath();
            ExcelWriter excelWriter = EasyExcelFactory.write(out,BianGengExcel.class).withTemplate(templateFileName).build();
//            ExcelWriter excelWriter = EasyExcel.write(out).withTemplate(templateFileName).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();
            excelWriter.fill(data,fillConfig,writeSheet);
            excelWriter.finish();
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return renderResult(Global.TRUE, text("导出用户成功!"));
    }

总结

只对jeesite感兴趣可以订阅jeesite专栏。更多实战经验,请关注实战专栏,实战专栏包含了所有jeesite专栏文章。

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

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

相关文章

2024年腾讯云服务器优惠券领取入口及使用教程

随着云计算技术的不断发展&#xff0c;越来越多的企业和个人选择将业务迁移到云端。腾讯云作为国内领先的云计算服务提供商&#xff0c;为了吸引用户上云&#xff0c;经常推出多种优惠活动&#xff0c;其中就包括服务器优惠券&#xff0c;本文将为大家分享腾讯云服务器优惠券的…

华为配置基于VLAN限速示例

华为配置基于VLAN限速示例 组网图形 图1 流量监管配置组网图 表1 Switch为上行流量提供的QoS保障 流量类型 CIR(kbps) PIR(kbps) DSCP优先级 语音 2000 10000 46 视频 4000 10000 30 数据 4000 10000 14 ^^^ 流分类简介配置注意事项组网需求配置思路操作步…

恒峰-智能高压森林应急消防泵:守护森林安全的绿色战士

在茂密的森林中&#xff0c;每一棵树木都是大自然的精灵&#xff0c;它们为我们提供氧气、净化空气、保持水土&#xff0c;是地球上不可或缺的生命之源。然而&#xff0c;当火灾肆虐时&#xff0c;这些树木也会成为我们的噩梦。为了保护森林资源&#xff0c;我们需要一种高效、…

TikTok外贸系统的核心功能及其源代码分享!

随着全球化的不断推进&#xff0c;外贸业务成为越来越多企业的增长动力&#xff0c;TikTok作为一个全球性的社交媒体平台&#xff0c;其用户基数庞大、活跃度高&#xff0c;为外贸业务提供了无限的商机。 为了帮助企业在TikTok上更好地开展外贸业务&#xff0c;TikTok外贸系统…

数据持久层框架:MyBatis

数据持久层框架&#xff1a;MyBatis 前言入门SqlSessionFactorySqlSession作用域&#xff08;Scope&#xff09;和生命周期 配置properties&#xff08;属性&#xff09;settings&#xff08;设置&#xff09;typeAliases&#xff08;别名&#xff09;typeHandlers&#xff08;…

Deep Learning相关概念介绍

工具&#xff1a; Anaconda: anaconda.com/products/individual。我理解是一个基于Python的AI程序开发环境&#xff0c;其作用类似于google notebook。区别是google notebook是在网页上&#xff0c;而Anaconda一般是安装在自己的服务器上。Jupyter Notebooks Anaconda激活深度…

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网&#xff1a;https://maven.apache.org/download.cgi 打开 maven 的官网下载页面&#xff0c;点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven&#xff0c;则点击 Maven…

JavaScript中call和apply函数方法

看下下面这个代码示例&#xff1a; javascript const lufthansa {airline: Lufthansa,iataCode: LH,bookings: [],book(flightNum, name) {console.log(${name} booked a seat on ${this.airline} flight ${this.iataCode}${flightNum});}, };lufthansa.book(239, ‘IT知识一…

python实现有限域GF(2^8)上的乘法运算

有限域GF(2^8)上的乘法运算可以看成多项式的乘法 5e转换成二进制为0101 1110&#xff0c;对应的多项式为x^6x^4x^3x^2x 3f转换成二进制为0011 1111&#xff0c;对应的多项式为x^5x^4x^3x^2x1 将这两个多项式相乘再模多项式x^8x^4x^3x1得到结果为1110 0101&#xff0c;转换为…

【扩散模型】生成模型中的Residual Self-Attention UNet 以及 DDPM的pytorch代码

参考&#xff1a; [1] https://github.com/xiaohu2015/nngen/blob/main/models/diffusion_models/ddpm_cifar10.ipynb [2] https://www.bilibili.com/video/BV1we4y1H7gG/?spm_id_from333.337.search-card.all.click&vd_source9e9b4b6471a6e98c3e756ce7f41eb134 TOC 1 UNe…

Vue3+vite+vant UI移动端项目创建保姆级教程

项目创建 创建Vue3项目 npm create vue@latestcd shoujihao-h5npm installnpm run formatnpm run dev修改端口 vue3 默认端口5173 想要把端口号修改为8088,在vite.config.js中写入 server: {port: 8088,//端口号host: true,//ip地址 或 0.0.0.0 或 "loaclhost"o…

OSCP靶场--Walla

OSCP靶场–Walla 考点(1.hydra http基本认证爆破&#xff1a; 2.sudo -l&#xff1a;python导入外部模块提权 3.Linux内核提权&#xff1a;cve-2021-4034) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.181.97 --min-rate 2000 Starting N…

浅谈二进制漏洞研究与病毒研究

安全方向 最近一些朋友找到我&#xff0c;说想学习一下漏洞和病毒研究&#xff0c;其实很多安全研究人员想入门二进制安全&#xff0c;但关于二进制安全&#xff0c;很多新手朋友对这个方向不太了解&#xff0c;也不知道该怎么去深入的研究学习二进制安全&#xff0c;如何才能…

装修必看干货|入户玄关设计进门就是客厅应该怎么设计?福州中宅装饰,福州装修

入户玄关设计在进门就是客厅的情况下&#xff0c;想要拥有单独的玄关空间&#xff0c;以下是五点设计建议&#xff1a; ①隔断屏风 使用隔断屏风是传统而常见的一种空间分割方法。可以选用木制、金属或玻璃等材质的屏风&#xff0c;根据需要进行灵活搭配和定制。 屏风的款式和…

项目可行性方案:人脸识别实现无感考勤的项目技术可行性方案

目 录 1.引言 1.1编写目的 1.2背景 2.可行性研究的前提 2.1要求 2.2目标 3.对现有系统的分析 3.1系统改进示意图 3.2改进之处 3.3技术条件方面的可行性 4.结论 1.引言 1.1编写目的 本报告编写的目的是探究学校里对教室和办公室内教师的人脸进行识别从而…

Kubernetes-1

学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件&#xff0c;相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、…

Linux虚拟文件系统管理技术

Linux虚拟文件系统管理技术 1. 虚拟文件系统的组成1.1 虚拟文件系统架构1.2 超级块(super block)1.3 索引节点(inode)1.3.1 inode怎样生成的?1.3.2 inode和文件的关系? 1.4 目录项(dentry)1.5 文件对象(file) 2. 进程与文件系统的关系3. 磁盘与文件系统的关系4. 常见的文件系…

STM32 (4) GPIO(1)

1.芯片的引脚分布 2.普通IO引脚的命名规则 3.IO复用 IO引脚身兼数职的现象叫做IO复用&#xff0c;可以使芯片拥有更多的功能&#xff0c;例如&#xff1a; PA9和PA10既可以用于GPIO的引脚&#xff0c;也可以用于串口或定时器的引脚 通用&#xff1a;CPU直接控制IO引脚的输入输…

了解游戏中的数据同步

目录 数据同步 通过比较来看状态同步和帧同步 状态同步 帧同步 帧同步实现需要的条件 两者相比较 数据同步 在联机游戏中&#xff0c;我的操作和数据要同步给同一局游戏中其他所有玩家&#xff0c;其他玩家的操作和数据也会同步给我。这叫做数据同步&#xff0c;目前数据…

C# Onnx segment-anything 分割万物 一键抠图

目录 介绍 效果 模型信息 sam_vit_b_decoder.onnx sam_vit_b_encoder.onnx 项目 代码 下载 C# Onnx segment-anything 分割万物 一键抠图 介绍 github地址&#xff1a;https://github.com/facebookresearch/segment-anything The repository provides code for runn…