JAVA导出Excel步骤

JAVA导出Excel方法

在很多项目中,都会有“数据导出到Excel”的需求,导出其实满简单的,但以前还没接触过导出功能时,项目需求就有一个导出功能,查看了网络中各人的经验。发现都很乱。讲不清楚。看不明白。要的没有,不要的一大堆加在代码中,使得新手看到这些代码很混乱。今天我也记录一下我导出Excel的方法。我会按步骤去写。这样大家可以直接Copy代码,然后根据自己的需求修改相应的步骤里的方法即可。

最近赶项目中,今天周六周日可以休息了,上周可是连续加班。在休息期间写写博客。谢谢大家的关注。

*导出Excel步骤

  1. 先导包,(poi包,他是apache下的导出Excel封装类包)
  2. 写导出Excel功能类
  3. 在Action中调用第二步的Excel功能类
  4. 在JSP前台调用Action执行导出功能
那我就从上面的步骤一一细写,大家请往下看。

1.先导包,(poi包,他是apache下的导出Excel封装类包)

  POI包,大家可以上百度下载。这个容易,我就不描述了。下载后,把包导入到你的项目中即可

2.写导出Excel功能类

这一步很关键。是导出的重要步骤,也是你要修改最多的内容,直接贴代码了。对了,对下面不能理解的同学,可以先自己在电脑上建一个Excel文档,先了解一下他是什么结构的表格。这样会更容易理解下面的代码。下面代码是一行行的插入数据,第一行为标题,第二行以后就是标题对应的数据,也就是数据库的数据了。
package com.ssh.fzp.common;

import java.io.OutputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import com.ssh.fzp.entity.VJJDB_ZPJQB;



public class VJJDB_ZPJQB_Excel1 {
	//打开文件
	Workbook wb = new HSSFWorkbook();
	public CellStyle titleStyle(){
		CellStyle style1  = wb.createCellStyle();
		//居中
		style1.setAlignment(CellStyle.ALIGN_CENTER);
		//背景色
		style1.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		//字体
		 Font font = wb.createFont();
//		 font.setBoldweight(Font.BOLDWEIGHT_BOLD);	//粗体
		 font.setColor(HSSFColor.BLACK.index);		//颜色
		 font.setFontHeightInPoints((short) 12);	//字体大小
		 style1.setFont(font);
		//边框
		 style1.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
		 style1.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);
		 style1.setBorderRight(HSSFCellStyle.BORDER_DOUBLE);
		 style1.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
		return style1;
	}
	
	public CellStyle contentStyle(){
			CellStyle style1  = wb.createCellStyle();
			//居中
				style1.setAlignment(CellStyle.ALIGN_CENTER);
				//背景色
				style1.setFillForegroundColor(HSSFColor.WHITE.index);
				style1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
				//字体
				 Font font = wb.createFont();
//				 font.setBoldweight(Font.BOLDWEIGHT_BOLD);	//粗体
				 font.setColor(HSSFColor.BLACK.index);		//颜色
				 style1.setFont(font);
				//边框
				 style1.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
				 style1.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);
				 style1.setBorderRight(HSSFCellStyle.BORDER_DOUBLE);
				 style1.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
				 style1.setWrapText(true);
				return style1;
	}
	public void printExcel(List<VJJDB_ZPJQB> list,OutputStream os){
		try{
	//1创建Excel文档
	
		<span style="white-space:pre">	</span>//1创建Excel文档
			Sheet sheet = wb.createSheet("文档名");
			//创建标题信息,
			String [] title = {"<span style="font-family: Arial, Helvetica, sans-serif;">内容1</span>","<span style="font-family: Arial, Helvetica, sans-serif;">内容2</span>","内容3","内容4"};//这就是第一行
			Row titleRow = sheet.createRow(0);
			for (int i = 0; i < title.length; i++) {
				Cell cell = titleRow.createCell(i);
				cell.setCellValue(title[i]);
				//设置列宽
				
				 sheet.setColumnWidth(i, 5500);
				cell.setCellStyle(titleStyle());
			}
			Cell cell = null;<span style="white-space:pre">			</span>//以下就是数据库中读取出来的数据,list是数据集合
			for (int i = 0; i< list.size(); i++) {
				Row row = sheet.createRow(i+1);
				VJJDB_ZPJQB vjjdb_zpjqb	= list.get(i);
				
				//
				String ZPLX =String.valueOf(vjjdb_zpjqb.getZPLX());
				
				String [] contents = {vjjdb_zpjqb.getJQ(),vjjdb_zpjqb.getBJ(),vjjdb_zpjqb.getBJM(),vjjdb_zpjqb.getBJ()};
				
				for (int j = 0; j < contents.length; j++) {
				
					cell = row.createCell(j);
					cell.setCellValue(contents[j]);
					cell.setCellStyle(contentStyle());

				}
			}
			wb.write(os);<span style="white-space:pre">	</span>//写入数据
			os.close();<span style="white-space:pre">	</span>//关闭流
		}catch(Exception e){
			
			}
		}
	
	
		
		
}

3.在Action中调用第二步的Excel功能类

/**
	 * 导出Excel
	 * @throws IOException 
	 */
	@SuppressWarnings("unchecked")
	@Action("ZPJQBExcel")
	public String ZPJQBExcel() throws IOException {
	

		Object[] params = (Object[]) ServletActionContext.getRequest().getSession().getAttribute("params");
		Object[] values = (Object[]) ServletActionContext.getRequest().getSession().getAttribute("values");
		
		List<VJJDB_ZPJQB> list = vjjdb_zpjqbService.find(params, values,
				-1, -1);
		OutputStream os = response.getOutputStream();<span style="white-space:pre">	</span>//上面是按条件查询出来的list数据集合,从这句开始就是导出Excel的方法
		response.setContentType("application/vnd.ms-Excel");
		VJJDB_ZPJQB_Excel1 vjjdb_zpjqb_excel = new VJJDB_ZPJQB_Excel1();
		vjjdb_zpjqb_excel.printExcel(list, os);
		System.setOut(new PrintStream(os));
		os.flush();
		return null;
	}
我这里思路是:我调用了我项目中的按条件查询并带有分页功能的方法。把里面的条件(params)和前台传过来的值(values)用Session传过来,既然要传过来,自然要在那个方法里先把这两个参数放到Session中,才能使用上面Session方法读出。然后我们再调用find()查询出List数据集合。最后就是下面的导出Excel语句了,把list传入即可。
不会Session保存?那我再贴出把值放入Session中的语句吧。
				ServletActionContext.getRequest().getSession().setAttribute("params", params);
				ServletActionContext.getRequest().getSession().setAttribute("values", values);

OK.就是这样了。最后我们在前台JSP中调用这个方法即可。如下

4.在JSP前台调用Action执行导出功能

location.href = "${pageContext.request.contextPath}/ZPJQBExcel.action";

在你的点击导出按钮里的事件就是上面这个了,这样调用Action就可以了。

有什么不明白的可以留言,我看到后就会回复,本人是福建厦门程序员,欢迎大家加Q为好友。348843576.不管你是刚开始学习的,还是前辈,我都欢迎。谢谢。

版权声明:本文为博主原创文章,未经博主允许不得转载。