>  기사  >  Java  >  Java를 사용하여 데이터를 Excel 파일로 내보내는 방법

Java를 사용하여 데이터를 Excel 파일로 내보내는 방법

坏嘻嘻
坏嘻嘻원래의
2018-09-15 10:53:228945검색

이 기사의 내용은 Java를 사용하여 데이터를 Excel 파일로 내보내는 방법에 대한 내용입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

메인 이 기사의 내용 Java를 사용하여 데이터를 Excel 파일 및 xls 형식으로 내보내는 방법에 대해 설명합니다.

예: 프런트 데스크에서 쿼리한 데이터를 EXCL 형식으로 내보내야 합니다. 파일. 프론트 데스크의 쿼리 조건(데이터)을 백엔드에 전달하고, 백엔드에서 데이터를 가져오고, SQL을 작성하고, 데이터베이스에서 쿼리하여 데이터를 가져옵니다(프런트엔드에서 쿼리한 데이터와 일치). 여기에서 쿼리한 내용은 목록 개체 컬렉션입니다. 그런 다음 제외 파일을 생성합니다(데이터는 파일에 있으며 파일 이름, 위치 및 내용은 모두 변경될 수 있음).

1단계: 백그라운드에서 프런트엔드 쿼리 조건을 가져오고 데이터를 쿼리합니다#🎜 🎜## 🎜🎜#(이 단계에서는 쓸 내용이 없습니다Java를 사용하여 데이터를 Excel 파일로 내보내는 방법)Java를 사용하여 데이터를 Excel 파일로 내보내는 방법Java를 사용하여 데이터를 Excel 파일로 내보내는 방법#🎜 🎜##🎜 🎜#

1 배경은 첫 페이지의 데이터를 가져옵니다. json을 사용하여 값을 전달하거나 url을 사용하여 값을 전달할 수 있습니다. 원하는 것을 사용하십시오. 결국, 먼저 달성하는 사람이 먼저옵니다

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 전송, (이것은 간단합니다. 나중에 매개변수와 해당 데이터를 조립하는 것입니다. 이 기사는 주로 전송에 관한 것이 아니라 단지 데모 예일 뿐입니다.)

예: #🎜 🎜#

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

2. 받기 데이터베이스의 쿼리 데이터(별로 중요하지 않으니 간단히 적어주세요

)# 🎜🎜#

이것은 SQL 문입니다. 이를 어떻게 설명합니까? SQL을 사용하여 어떤 종류의 데이터를 확인할 수 있습니까? Java를 사용하여 데이터를 Excel 파일로 내보내는 방법Java를 사용하여 데이터를 Excel 파일로 내보내는 방법

저는 주로 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格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个Java를 사용하여 데이터를 Excel 파일로 내보내는 방법Java를 사용하여 데이터를 Excel 파일로 내보내는 방법)。

得到数据之后,组装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();
		}		
	}
}

导出文件大致为:

Java를 사용하여 데이터를 Excel 파일로 내보내는 방법

위 내용은 Java를 사용하여 데이터를 Excel 파일로 내보내는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.