Java SpringMVC框架开发之数据导出Excel文件格式实例详解
在平时的开发中,我们会经常遇到这样一个需求,要在页面通过一个『导出』按钮把查询出的数据导出到Excel表格中。本文即为实现上述需求的一个小实例。
环境配置
- jar包
 - poi.jar
 - jdk1.6
 - tomcat7.0
 - eclipse4.4.0
 
本Demo是在SpringMVC框架中实现。
页面
export.jsp很简单,就只有一个超链接。
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>数据导出Excel测试界面 导出 
JavaBean类
publicclassPerson{
privateStringname;
privateStringage;
privateStringaddr;
privateStringsex;
//set/get方法和构造器省略。。。
工具类
packagecom.export.action;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.Iterator;
importjava.util.List;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importorg.apache.poi.hssf.usermodel.HSSFRichTextString;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importcom.export.pojo.Person;
/**
*数据导出到Excel工具类
*
*@authorzhang_cq
*
*/
publicclassExportUtil{
/**
*设置导出Excel的表名
*
*@return
*/
publicStringgetSheetName(){
return"测试导出数据";
}
/**
*设置导出Excel的列名
*
*@return
*/
publicStringgetSheetTitleName(){
return"序号,姓名,年龄,居住地,性别";
}
/**
*创建sheet的第一行,标题行
*
*@paramsheet
*@paramstrTitle
*/
privatevoidcreateSheetTitle(HSSFSheetsheet,StringstrTitle){
HSSFRowrow=sheet.createRow(0);//创建该表格(sheet)的第一行
sheet.setDefaultColumnWidth(4);
HSSFCellcell=null;
String[]strArray=strTitle.split(",");
for(inti=0;ipersonList)throwsIOException{
//创建一个Excel文件
HSSFWorkbookwb=newHSSFWorkbook();
//创建一个表格Sheet
HSSFSheetsheet=wb.createSheet(this.getSheetName());
//创建sheet的第一行,标题行
//行号从0开始计算
this.createSheetTitle(sheet,this.getSheetTitleName());
//设置sheet的主体内容
this.createSheetBody(personList,sheet);
ByteArrayOutputStreamoutput=newByteArrayOutputStream();
wb.write(output);
byte[]ba=output.toByteArray();
InputStreamis=newByteArrayInputStream(ba);
returnis;
}
privatevoidcreateSheetBody(ListpersonList,HSSFSheetsheet){
if(personList==null||personList.size()<1){
return;
}
//表格(sheet)的第二行,第一行是标题,Excel中行号,列号是由0开始的
introwNum=1;
HSSFCellcell=null;
HSSFRowrow=null;
for(Iteratorit=personList.iterator();it.hasNext();rowNum++){
Personperson=(Person)it.next();
if(person==null)
person=newPerson();
row=sheet.createRow(rowNum);
inti=0;
cell=row.createCell(i++);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(newHSSFRichTextString(rowNum+""));
cell=row.createCell(i++);//name
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(newHSSFRichTextString(person.getName()));
cell=row.createCell(i++);//age
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(newHSSFRichTextString(person.getAge()));
cell=row.createCell(i++);//addr
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(newHSSFRichTextString(person.getAddr()));
cell=row.createCell(i++);//sex
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(newHSSFRichTextString(person.getSex()));
}
}
}   
Action类
packagecom.export.action;
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importcom.export.pojo.Person;
/**
*@authorzhang_cq
*@versionV1.0
*/
@Controller
publicclassExportData{
/**
*起始页面
*
*@return
*/
@RequestMapping("/index")
publicStringlogin(){
return"index";
}
/**
*导出Excel
*
*@authorzhang_cq
*/
@RequestMapping("/export")
publicStringexport(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
//设置导出的编码格式,此处统一为UTF-8
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//设置导出文件的名称
response.setHeader("Content-Disposition",
"attachment;filename="+newString("数据导出Excel测试.xls".getBytes(),"iso-8859-1"));
//模拟表格需要导出的数据
Personp1=newPerson("张三","22","北京","男");
Personp2=newPerson("李四","23","济南","女");
Personp3=newPerson("王五","24","上海","男");
ListpersonList=newArrayList();
personList.add(p1);
personList.add(p2);
personList.add(p3);
//实际应用中这个地方会判断获取的数据,如果没有对应的数据则不导出,如果超过2000条,则只导出2000条
if(personList.size()==0){
PrintWriterprint=response.getWriter();
print.write("没有需要导出的数据!");
returnnull;
}
ServletOutputStreamout=response.getOutputStream();
BufferedInputStreambis=null;
BufferedOutputStreambos=null;
try{
ExportUtildataExportUtil=newExportUtil();
bis=newBufferedInputStream(dataExportUtil.getExcelStream(personList));
bos=newBufferedOutputStream(out);
byte[]buff=newbyte[2048];
intbytesRead;
while(-1!=(bytesRead=bis.read(buff,0,buff.length))){
bos.write(buff,0,bytesRead);
}
bos.flush();
}catch(finalIOExceptione){
System.out.println("数据导出列表导出异常!");
}finally{
if(bis!=null){
bis.close();
}
if(bos!=null){
bos.close();
}
}
return"export";
}
}  
至此,就是Java将数据导出Excel文件格式的方法,更多关于这方面的文章请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。