struts2 poi 把数据导出到excel

来源:互联网 发布:掌上贵金属行情软件 编辑:程序博客网 时间:2024/04/26 18:36

利用Apache的poi把数据导出到excel是一件很简单的一件事,这里结合struts2进行做一个小例子,看看poi如何把数据导出到excel。

1.下载poi和struts2,这里用的是poi3.7和struts-2.2.1。

2.把poi和struts2的jar包加到lib目录下,下图所示。

   

3.struts2的配置文件 struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="default" extends="struts-default"><action name="exportExcel" class="com.crd.action.ExportExcelAction"> <result name="success" type="stream"> <!-- 指定输出的为Excel文件 -->  <param name="contentType">application/vnd.ms-excel</param><!-- 类型是附件和指定下载时文件的默认名字 --><param name="contentDisposition">attachment;filename="Users.xls"</param><!-- 这里的inputName的属性要和action里相应的get方法的名字对应。例如action的对应的方法名是getDownloadFile所以这里用downloadFile --><param name="inputName">downloadFile</param></result></action></package></struts>
4.关键部分,那就是下载的那部分代码。先讲讲poi导出到excel的原理。poi的原理就是一个单元格一个单元格的画表格,先创建一个工作薄,再创建一个表格(因为一个工作薄有多个表格),然后再给表格添加行,给行添加单元格,同时设置单元格格式。

(1)声明一个工作薄

HSSFWorkbook wb=new HSSFWorkbook();

(2)创建一个表格

 HSSFSheet sheet=wb.createSheet("表格名字");

(3)创建一个表格样式

HSSFCellStyle cellStyle = wb.createCellStyle();

 给样式设置背景颜色等等

HSSFFont font = wb.createFont();

font.setFontHeightInPoints((short)10); // 字体高度

font.setColor(HSSFFont.COLOR_NORMAL); // 字体颜色

font.setFontName( "宋体" ); 

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 宽度

cellStyle.setFont(font);

(4)给表格创建一行(多行用for循环)

  HSSFRow row=sheet.createRow(0);

(5)给行添加单元格

HSSFCell cell=row.createCell(i);

(6)给单元格设置格式

cell.setCellStyle(cellStyle); 

(7)往单元格写数据

cell.setCellValue("序号");

(8)写出到excle

OutputStream os=new FileOutputStream(file);
wb.write(os);
os.close();

action的具体代码如下

@SuppressWarnings("serial")public class ExportExcelAction extends ActionSupport{public InputStream getDownloadFile() throws Exception{return this.getInputStream();}public InputStream getInputStream() {HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet=wb.createSheet("用户列表");// 设置表格样式        HSSFCellStyle cellStyle = wb.createCellStyle();HSSFFont font = wb.createFont();font.setFontHeightInPoints((short)10); // 字体高度        font.setColor(HSSFFont.COLOR_NORMAL); // 字体颜色        font.setFontName( "宋体" );         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 宽度        //font.setItalic( true );   // 是否使用斜体        //font.setStrikeout(true); // 是否使用划线        cellStyle.setFont(font);        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平布局:居中        cellStyle.setWrapText(false);           HSSFRow row=sheet.createRow(0);HSSFCell cell=row.createCell(0);cell.setCellStyle(cellStyle); // 设置单元格样式cell.setCellValue("序号");cell=row.createCell(1);cell.setCellStyle(cellStyle); // 设置单元格样式cell.setCellValue("姓名");cell=row.createCell(2);cell.setCellStyle(cellStyle); // 设置单元格样式cell.setCellValue("年龄");//如果是数据库的数据的话,用一个for循环就可以输出全部了row=sheet.createRow(1);cell=row.createCell(0);cell.setCellValue(1);cell=row.createCell(1);cell.setCellValue("张三");cell=row.createCell(2);cell.setCellValue("22");//String fileName=RandomStringUtils.randomAlphanumeric(10);String fileName="Users";fileName=new StringBuffer(fileName).append(".xls").toString();File file=new File(fileName);try {OutputStream os=new FileOutputStream(file);wb.write(os);os.close();InputStream is=new FileInputStream(file);return is;} catch (Exception e) {e.printStackTrace();}return null;}@Overridepublic String execute() throws Exception {return SUCCESS;}}
5.运行结果如下:

6.总结

是很简单吧,里面有些写得不好的地方。

比如说在action里直接写死了生成的excel的名字Users

//String fileName=RandomStringUtils.randomAlphanumeric(10);
String fileName="Users";

如果在同一时间有多人点击下载按钮,如果导出的数据不同时,可能会出错,可以改成随机取名字,但这样的话生成的临时的excel会有很多,要写个方法进行删除过期的excel,或者就不生成临时的excel,直接导出来就可以了,这样无疑是最好的(后面改进,或者有兴趣的读者改进)。以前做的时候用的是struts1,直接

OutputStream out=response.getOutputStream();就可以了。


资源下载链接http://download.csdn.net/detail/crd629277/3688404







原创粉丝点击