Poi高效导出Excel模板

利用POI将数据导出到EXCEL模板 在开发中导出导入数据,我们是经常用到的,近期,公司开发中需要将指定数据导入到用户给定的EXCEL模板中,并根据要求合并单元格,在这里,我写了个简单的demo,可以概括我所用到的知识点,以供有需要的朋友借鉴。         相关DEMO下载:PoiTest           public class Test { public static void main(String[] args) 阅读详情

前言

   项目中做报表,导入导出Excel,是常见也是不可或缺的功能,本文讲解导出Excel的写法,以及导出大数据量(50万起步)的优化方案

Poi高效导出Excel模板

public void exportExcel(){
List<List<Object>> excelDataResult = new CopyOnWriteArrayList<>(new ArrayList<>()); //Excel对应行的数据
		final String EXCEL_NAME ="导出的表名";
		List<Map<String, Object>> tempDataList = getExportData(); //获取导出数据
		List<Object> headExcelKey = new ArrayList<>();   //获取导出表头key容器  目的为了动态获取对应数据
		List<Object> headExcelValue = new ArrayList<>(); //获取Excel表头value容器导出   目的作为表头
		getHeaderKeyAndValue(headExcelValue, headExcelKey); //获取excel的表头key与value
		excelDataResult.add(headExcelValue); //加入导出Excel头信息
		SXSSFWorkbook sxssfWorkbook = getSheetsData(excelDataResult, EXCEL_NAME, tempDataList, headExcelKey);//获取excelData
		exportRelationExcel(EXCEL_NAME, sxssfWorkbook); //导出excel
}

	private void exportRelationExcel(String EXCEL_NAME, SXSSFWorkbook sxssfWorkbook) {
		response.setContentType("application/vnd.ms-excel");
		String fileName = EXCEL_NAME+"-"+df.format((new Date()))+".xlsx";
		String finalFileName ;
		try {
			if (StringUtils.contains(userAgent, "MSIE")) {
				finalFileName = URLEncoder.encode(fileName, "UTF8");
			} else if (StringUtils.contains(userAgent, "Mozilla")) {
				finalFileName = new String(fileName.getBytes("GBk"), "ISO-8859-1");
			} else {
				finalFileName = URLEncoder.encode(fileName, "UTF8");
			}
			response.setHeader("Content-disposition", "attachment;filename=" + finalFileName);
			OutputStream outputStream = response.getOutputStream();
			sxssfWorkbook.write(outputStream);
			outputStream.flush();
			outputStream.close();
		} catch (IOException e) {
			logger.error("导出失败,失败原因:{}");e.printStackTrace();
		}
	}
	
	private SXSSFWorkbook getSheetsData(List<List<Object>> excelDataResult, String EXCEL_NAME, List<Map<String, Object>> tempDataList, List<Object> headExcelKey) {
		SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook();
		Sheet sheet = sxssfWorkbook.createSheet(EXCEL_NAME);
		if(!tempDataList.isEmpty()&&tempDataList.size()>0){
			tempDataList.forEach(tempData->{
				List<Object> headExcelData = new ArrayList<>();
				headExcelKey.forEach(key->{
					headExcelData.add(tempData.get(key));
				});
				excelDataResult.add(headExcelData);
			});
		}
		for (int i = 0; i < excelDataResult.size(); i++) {
			Row row = sheet.createRow(i);
			List<Object> cellValue = excelDataResult.get(i);
			for (int j = 0; j < cellValue.size(); j++) {
				row.createCell(j).setCellValue(String.valueOf(null==cellValue.get(j)?"":cellValue.get(j)));
			}
		}
		return sxssfWorkbook;
	}
	
	
	private void getHeaderKeyAndValue(List<Object> headExcelValue, List<Object> headExcelKey) {
		Map<String,Object> headerMap = new LinkedHashMap<String,Object>();
		headerMap.put("name","姓名");
		headerMap.put("age","年龄");
		headerMap.put("phone","手机号码");
		headerMap.put("city","所在城市");
		headerMap.put("area","地区");
		headerMap.put("status","状态");
		headerMap.put("crateTime","创建日期");
		headerMap.put("createBy","创建人");
		headerMap.put("updateBy","修改人");
		headerMap.put("updateTime","更新日期");
		for(Map.Entry<String,Object> entry: headerMap.entrySet()){
			String key = entry.getKey();
			Object value = entry.getValue();
			headExcelValue.add(value);
			headExcelKey.add(key);
		}
	}


private List<Map<String, Object>> get() {
		String queryExportDataSql = "select name ,age,phone,city,area,status,crate_time as crateTime,create_by as createBy,update_by as updateBy,update_time as updateTime from user_info";
		return jdbcTemplate.queryForList(queryRelationSql);
	}
使用freemarker导出复杂的excel表格、word文档         最近因为项目需要,需要导出复杂的excel表格。由于需要合并单元格以及样式处理,用poi导出显得比较困难。因为之前用freemarker导出过pdf/word文件,就想着能不能用其导出excel。经过一番实验,大功告成,真是比poi好用N多倍呀!废话少说,直接进入正题。        excel表格用编辑器打开后,可以发现它也是一个可编辑的标记性的格式,如同html页面里面的标签首... 阅读详情

相关推荐

Java导出Excel实战:用MyExcel替代POI和EasyExcel,模板填充让报表开发更高效

在Java后端开发中,Excel导入导出是高频需求,如何从繁琐的Apache POI编码中解脱出来,成为不少开发者的痛点。EasyExcel虽解决了大文件读取问题,但注解依赖和模板表达能力有限。MyExcel作为基于POI的轻量封装工具,将Excel视为页面模板,通过Freemarker/Beetl引擎渲染,实现复杂报表的快速生成。本文从核心API出发,拆解ExcelUtils与Writers门面的用法,深入模板填充原理,结合多Sheet、CSV处理、性能实测及生产环境踩坑经验,提供一套完整的Java报表导

weixin_34094282的博客 199

基于poi的三种excel导出方式

本文主要记录了日常开发中常见的excel导出方式,包括直接遍历设值、基于自定义注解和基于excel文件模板。

qq_32590535的博客 1万+

基于Apache POI的Excel模板导出实战教程

Apache POI 是 Apache 基金会提供的主流 Java API,用于操作 Microsoft Office 文档,尤其在 Excel 文件的读写场景中被广泛采用。其核心模块 HSSF、XSSF 和 SXSSF 分别支持 .xls(Excel 2003)和 .xlsx(Excel 2007+)格式,底层基于 BIFF 与 OOXML 标准实现。通过统一的抽象接口(如WorkbookSheetRowCell。

weixin_36231030的博客 1225

POI通过模板导出excel(包含表头合并处理)

最近接触到比较多poi相关的需求,总结一下通过模板导出以及表头合并的一些复杂情况处理

21届Java攻城狮&Python民兵 8257

Apache POI Excel模板导出实战教程

Apache POI项目是一个开源的Java库,用于处理Microsoft Office文档。它的主要功能包括创建、修改、显示、转换以及打印文档等,使得开发者能够在应用程序中无缝地集成对Microsoft Office文档的操作。Apache POI支持各种Office文件格式,如HSSF和XSSF处理Excel文件,HWPF处理Word文档,还有用于处理PowerPoint文档的HSLF等。本章节将首先介绍Apache POI库的基本概念和核心功能,然后讨论其在企业级应用中的优势及应用场景。

weixin_36427956的博客 1015

POI实现的基于动态模板的EXCEL数据导出

经测试导出23万数据耗时在3min左右 使用方法见com.teacherInfo.export.test.Test 提供依赖的POI开发包

POI导出Excel (满满的干货啊)

已经实现的POI导出Excel 步骤一:导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <d

小七会喷火 1万+

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4383

【亲测免费】 poi-excel-template:轻量级Excel模板引擎,让数据导出更简单!

poi-excel-template:轻量级Excel模板引擎,让数据导出更简单! 在日常开发中,处理Excel数据导出是一项常见却往往令人头疼的任务。但有了 poi-excel-template,一切变得轻松起来。这是一个专门为简化基于Apache POI的Excel数据导出而生的开源库,旨在帮助开发者高效、灵活地根据预设模板批量生成定制化的Excel文件。下面让我们深入了解这个宝藏工具。 项目...

gitblog_00356的博客 670

Windows服务器SSL漏洞修复实战:如何一键禁用TLS 1.0/1.1避免SWEET32攻击

本文提供了Windows服务器修复SWEET32漏洞的实战指南。通过组策略编辑器,详细讲解如何一键禁用不安全的TLS 1.0/1.1协议,并优化密码套件顺序,以消除由3DES等弱加密算法带来的安全风险。文章还涵盖了应对SQL Server等应用兼容性挑战的解决方案,以及企业级批量部署的脚本化方法,帮助管理员系统性地提升服务器TLS/SSL安全配置。

weixin_29310631的博客 246

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

poi+jxl实现模板式的百万级excel导出

简介 本文采用excel模板的方式实现excel导出,在excel2007及其以上版本,可实现百万级数据导出,在excel2003预计几万,超过会报内存溢出。 这套逻辑,关于导出,控制层和业务层几乎不用写太多代码 一、pom引入 <dependency> <groupId>org.apache.poi</groupId> <ar...

无言的博客 973

手把手教你接入京东购物小程序:从领券到下单的全流程解析

本文详细解析了如何从API申请到领券下单,手把手教你接入京东购物小程序的全流程。涵盖京东联盟账号注册、商品信息获取、优惠券链接转换等关键技术实践,帮助开发者高效实现电商功能集成,提升用户购物体验。

g5h6i的博客 911

Spring使用POI导出excel(使用网络请求)

概要 POI是后端导出excel的常用插件 这里提供几个代码编写的建议和具体事例供参考 建议 1.代码抽离封装 将一段逻辑代码封装成一个方法而不是所有代码全部写进一个方法中 2.样式设置和数据写入分离 不要一边写数据一边改样式,否则会有点混乱 3.推荐使用模板 本地新建一个excel(比如.xlsx)文件,设置好样式之后放在项目资源文件(resources)下 我们只需要填充数据或设置边框就好了 大大节省设置样式的功夫 4.前端请求格式 使用跳转而不能使用ajax 步骤 1.p

清欢Viki的博客 596

CLCD 中国生命周期基础数据库使用攻略

CLCD 是公共建筑碳排放计算的理想选择,其本地化数据可显著提高计算准确性。

hy行者勇哥的博客 2692

数据集FFHQ和LSUN介绍【包含FFHQ1024,515,256,128分辨率图像获取方法】

FFHQ全称Flickr-Faces-High-Quality(Flickr-Faces-HQ),最初是作为生成式对抗网络(GAN)的基准创建的,也用于StyleGAN的训练数据集中,并由英伟达于2019年开源。CVPR_2019Flickr-Faces-HQ (FFHQ)其由 70,000 张分辨率为 1024×1024 的高质量 PNG 图像组成,在年龄、种族和图像背景方面包含相当大的差异。它对眼镜、太阳镜、帽子等配饰也有很好的覆盖。

zik的博客 3981

JAVA导出EXCEL心得

原文地址:http://blog.youkuaiyun.com/lb_mail/article/details/6548045#comments 最近一段时间,一直在做统计报表,其中含有大量复杂的报表的导出工作,对不同的第三方工具(例如POI、JXL和JXLS等)算是略有研究吧,下面就给大家分享一下我的使用心得: 一、POI 对于POI而言,可以说是导出EXCEL的基础,其他的第三方工具都是在其

z69183787的专栏 2906

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 767

easyuiPoi导出Excel工具类封装支持合并单元格:让数据导出更智能、更高效

easyuiPoi导出Excel工具类封装支持合并单元格:让数据导出更智能、更高效 去发现同类优质开源项目:https://gitcode.com/ 在当今数据驱动的时代,Excel已成为企业、学术和日常生活中不可或缺的工具。但如何在保证数据准确性的同时,提升导出Excel的效率与美观度呢?easyuiPoi导出Excel工具类封装应运而生,它不仅支持通过模板快速导出Excel,更独特的是,它支持...

gitblog_06740的博客 850

Allegro172版本多人协同在线设计操作指导

首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本。另外一个用户同样打开相同版本的172,选择Symphony Team design。Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下。协同模式下,不能直接保存文件,需要另存版本,注意时常保存文件,以免丢失数据。第一个用户打开PCB,选择Symphony Team design。等待一会出现如下窗口,表示已经共享成功了,并且记下IP地址。出现一个窗口,输出开共享用户的IP地址。

weixin_54787054的博客 4956

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java poi 导出excel 速度慢_java apache poi 根据模板导出excel效率问题

我现在数据库的数据时1620条,查询用了400ms左右,但是光是循环读取数据写入excel就用了7000ms左右,实现太慢了,我也想过用多线程的方式,但是多线程处理list循环后会顺序就不是想要的顺序了,希望做过导出excel的大神,可以给我推荐一个按照模板导出excel高效的代码,谢谢。privateExcelTemplatehandlerObj2Excel(Stringtemplate...

weixin_32770541的博客 1725

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java报表技术POI实战

报表[forms for reporting to the higher organizations],就是向上级报告情况的表格。简单的说:报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据”。功能说明:整个案例我们操作用户表,做一个企业员工(用户)数据的导入导出。我们使用SpringBoot+通用mapper+vue方式搭建开发环境第一步:准备数据库,把资料文件夹下中的sql脚本直接执行《report_manager_db.sql》第二步:打开idea或Ec

fegus的博客 1941

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring Boot + Apache POI 实现 Excel 导入导出

Autowired/*** Excel 导入接口* 接收参数:customerId(客户ID)+ file(Excel 文件)*/@ApiOperation(value = "已购设备清单导入")try {return ApiResult.success("导入成功", result);关键点解析:接收上传的 Excel 文件:业务参数(客户ID)使用try-catch捕获异常,返回友好的错误信息@Autowired/*** Excel 导出接口。

qq_68599880的博客 1121

POI报表——模板打印 AND 海量数据导出

准备工作导入POI的Jar包:maven工程需要在:Pom.xml文件中的xml配置<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.11</version> </dependenc

没有伞的孩子必须努力奔跑!—小林 1458

SSM整合-EasyExcel框架简化POI操作Excel

概述 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一些严重的问题,如代码编写繁琐且重复,极其耗费内存。EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百万的Excel 导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId&gt

weixin_44257023的博客 1156

Excel导出新思路:EasyPOI与Apache POI的混合开发实践

本文探讨了Excel导出的高级实践,通过结合EasyPOI与Apache POI的混合开发模式,实现灵活高效的解决方案。重点介绍了自定义模板、动态样式覆盖和多级动态表头生成等关键技术,适用于复杂报表和大数据量导出的企业级需求。

lg888的博客 433
上一篇: Tomcat乱码
下一篇: Poi快速导出百万Excel,分多Excel导出
WindwardBird
博客等级 码龄7年 19粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值