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(List personList,HSSFSheetsheet){ if(personList==null||personList.size()<1){ return; } //表格(sheet)的第二行,第一行是标题,Excel中行号,列号是由0开始的 introwNum=1; HSSFCellcell=null; HSSFRowrow=null; for(Iterator it=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。