0

0

如何使用java将数据导出为excel文件

坏嘻嘻

坏嘻嘻

发布时间:2018-09-15 10:53:22

|

9427人浏览过

|

来源于php中文网

原创

本篇文章给大家带来的内容是关于如何使用java将数据导出为excel文件,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的。

例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件。需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sql,从数据库中进行查询;得到数据(跟前台查询到的数据一致,这里我演示的查询出来的数据为一个list对象集合),再生成excl文件(数据在文件里面,文件名称,位置,内容,都可更改)。

第一步:后台得到前台查询条件并查询出数据(这个步骤没啥要写的偷笑大笑大笑

1.后台得到前台页面的数据。你可以使用json传递值,也可以用url传递。你想用哪个就用哪个。毕竟达者为先

立即学习Java免费学习笔记(深入)”;

json传递值例子:(写的例子,可能跟后面数据对不上,但是意思对就行了)

var data = $("#fromid").serializeObject();//表单变为json格式字符串  
//没有form表单的可以自己认为创建一个json字符串  
//var data = jQuery.parseJSON('{"FPHM":null,"FDBH":null}');  
data["FPHM"]=FPHMs;//页面的查询条件,将data传递到后台  
data["FDBH"]=_FDBH;	
$.ajax({	    
	beforeSend: function(xhr){
		xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token"));
		     },	    
	url: "",//你的url	   
	type: "post",	    
	contentType: 'application/json;charset=utf-8',	    
	dataType: "json",	    
	data: JSON.stringify(data),//传递格式为json格式	    
	success: function(data){			   
			$.messager.alert("提示","成功"+data,"info");	 	     
		},	    
	async: true,	    
	error: function(er) {}	
});

url传递,(这个就简单了,就是平常的url,就是给后面组装上参数和对应的数据,本文主要不是讲传递,只是一个演示例子)

例子:

PixVerse
PixVerse

PixVerse是一款强大的AI视频生成工具,可以轻松地将多种输入转化为令人惊叹的视频。

下载
function clickdown(){//这里演示传递两个参数  
	var prnteTest=document.getElementById("prnte").value;   
	var prnteName=document.getElementById("prnteName").value;  
	location.href='url?prnteTest='+prnteTest+'&prnteName='+prnteName;  
}

2.得到数据库中的查询数据(这个也不是太重要,也简单写了大笑大笑

这个就是sql语句了,这个怎么演示呀,就是sql呗,你们想要生成什么数据,就sql查呗。

我主要不是为了怎么解析json格式数据,我使用的url传递数据使用

String name = request.getParameter("name");

这种格式得到数据,

如果为json格式传递到后台,数据形如

{ "name": 3,"post": 1 ,
 "rows": [{"JLBH":30005,"HTH":40200,"WLDW":"0316","NAME":"深圳市控股公司",
 "DTID":585,"DT_NAME":"珠宝采购","FKJE":234.0}]}

可以使用下面的进行解析

JSONObject jsonObj = JSONObject.fromObject(data);
Stringname =jsonObj.getParameter("name");

如果上面方法不能够解析json格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个偷笑奋斗)。

得到数据之后,组装sql语句,在数据库中查询即可,这里不演示怎么查询的,结果为一个list集合里面存放着要导出的数据

第二步:生成excel文件

根据前台得到的条件,从数据库中得到数据,导出的表头

	/**
	* 测试 导出xls文件的表头	 
	*/	
	public static final String[] TestToXls = { "编号","设计人员工号", "设计人员姓名","开发人员工号", "开发人员姓名", "测试人员工号", "测试人员姓名"};

其中list存放的是一个对象,类似javaBean:

List<Test> listTest = new ArrayList<Test>();

形如:

public class Test{
	private String idd;//编号
	private String designId;//设计人员工号
	private String designName;//设计人员姓名
	private String developId;//开发人员工号
	private String developName;//开发人员姓名
	private String testId;//测试人员工号
	private String testName;//测试人员姓名
	//对应的set,get 省略
}

我使用的是Mybatis,其中有一个resultType,为返回类型。

形如:

<select id="findAllUser"parameterType="java.util.Map"resultType="com.test.Test" >
	select pr.qid as idd,--这里的as 后跟的,	
	pr.des_id as designId, pr.des_name as designName,	
	pr.de_id as developId, pr.de_name as developName,	
	ps.te_id as testId, ps.te_name as testName
	from ps_test_red pr left join ps_test_em ps on ps.id=pr.sys_id 
	where pr.par_nme_te > #{prnte}--组装sql语句,查询出数据
</select>

导出文件方法

public void toExcel() {	
	//这里为导出文件存放的路径	
	String filePath ="C:\Users\USER" + UUID.randomUUID() + "\";	
	//加入一个uuid随机数是因为	
	//每次导出的时候,如果文件存在了,会将其覆盖掉,这里是保存所有的文件	
	File file = new File(filePath);	
	if (!file.exists()) {		
		file.mkdirs();	
	}
	
	SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");	
	// 给要导出的文件起名为 "测试导出数据表_时间.xls"	
	String filePath2 = filePath + "测试导出数据表" + "_" + fmt.format(new Date()) + ".xls";	
	WritableWorkbook wb = null;	
	try {		
		File file2 = new File(filePath2);		
		if (!file2.exists()) {//不存在,创建			
			file2.createNewFile();		
		}		
		wb = Workbook.createWorkbook(file2);//创建xls表格文件
	
		// 表头显示
		WritableCellFormat wcf = new WritableCellFormat();		
		wcf.setAlignment(Alignment.CENTRE);// 水平居中		
		wcf.setWrap(true);		
		wcf.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中		
		wcf.setFont(new WritableFont(WritableFont.TIMES,13, WritableFont.BOLD));// 表头字体 加粗 13号		
		wcf.setBackground(jxl.format.Colour.PERIWINKLE);
		// 内容显示		
		WritableCellFormat wcf2 = new WritableCellFormat();		
		wcf2.setWrap(true);//设置单元格可以换行		
		wcf2.setAlignment(Alignment.CENTRE);//水平居中		
		wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中		
		wcf2.setFont( new WritableFont(WritableFont.TIMES,11));// 内容字体 11号

		//导出的xls的第一页,第二页就是0换成1,“sheet1”,也可以修改为自己想要的显示的内容
		WritableSheet ws = wb.createSheet("sheet1", 0);		
		//WritableSheet ws2 = wb.createSheet("sheet2", 1);//第2个sheet页		
		ws.addCell(new Label(0,0, "导出结果"));//代表着表格中第一列的第一行显示查询结果几个字

		// 导出时生成表头		
		for (int i = 0; i < TestToXls.length; i++) {
			//i,代表的第几列,1,代表第2行,第三个参数为要显示的内容,第四个参数,为内容格式设置(按照wcf的格式显示)			
			ws.addCell(new Label(i, 1, TestToXls[i],wcf));//在sheet1中循环加入表头
		}
				
		//查询出来的数据,这个方法是演示所用		
		String sql="com.Test.Service.findAllUser";//sql为mybatis框架下的路径		
		Map<String, Object> map = new HashMap<String, Object>();//map里为存放前台的条件
		map.put("prnte",  this.getParameter("prnteTest"));
		List<Test> listTest = TestService.findAllList(sql, map);
		int k =2 ;//从第三行开始写入数据
		
		for (int i = 0; i < listTest.size(); i++) {			
			ws.addCell(new Label(0, k, listTest.get(i).getIdd(), wcf2));
			ws.addCell(new Label(1, k, listTest.get(i).getDesignId(),wcf2));
			ws.addCell(new Label(2, k, listTest.get(i).getDesignName(),wcf2));
			ws.addCell(new Label(3, k, listTest.get(i).getDevelopId(),wcf2));
			ws.addCell(new Label(4, k, listTest.get(i).getDevelopName(),wcf2));
			ws.addCell(new Label(5, k, listTest.get(i).getTestId(),wcf2));
			ws.addCell(new Label(6, k, listTest.get(i).getTestName(),wcf2));
			//ws.mergeCells(4, 5, 5, 5);//合并两列,按参数顺序,意思是第4列的第五行,跟第五列的第五行合并为一个单元格			
			k++;		
		}		
		wb.write();//写入,到这里已经生成完成,可以在相应目录下找到刚才生成的文件	
	} catch (IOException e) {
		e.printStackTrace();	
	} catch (JxlWriteException e) {
		e.printStackTrace();	
	} catch (WriteException e) {
		e.printStackTrace();	
	} finally {		
		try {			
			if (wb != null) {
				wb.close();
			}		
		} catch (WriteException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}	
	//这个是我们项目中,是把刚才生成的文件,响应到前台,进行下载、保存,可省略。	
	downLoadFile(filePath2);
}

响应到前台(就是读取文件,网上很多)

public void downLoadFile(String filePath) {
			
	FileInputStream in = null;		
	ServletOutputStream out = null;		
	BufferedOutputStream toOut = null;		
	try {			
		in = new FileInputStream(new File(filePath));			
		byte[] buffer = new byte[in.available()];			
		while (in.read(buffer) != -1) {				
			HttpServletResponse response = this.getContext().getResponse();//从application中得到response				
			response.reset();// 清空				
			// 设置响应的文件的头文件格式
			response.setContentType("application/octet-stream");
			response.setHeader("Content-Disposition",
					"attachment;filename="+ new 
					String(fileName.getBytes("GBK"),"ISO8859-1"));
			response.addHeader("Content-type", "application-download");
			// 获取响应的对象流
			out = response.getOutputStream();
			toOut = new BufferedOutputStream(out);
			toOut.write(buffer);
			toOut.flush();
		}		
	} catch (Exception e) {	
		e.printStackTrace();		} 
	finally {
		try {
			if(in!=null) {	
				in.close();	
			}				
			if(out != null) {
				out.close();
			}
			if(toOut != null) {
				toOut.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

导出文件大致为:

20170901143039271.png

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

89

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

276

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

99

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

105

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

230

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

619

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

173

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 21.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号