struts2+hibernate+poi导出Excel实例



struts2+hibernate+poi导出Excel实例.

实例通过struts2+hibernate+poi实现导出数据导入到Excel的功能

 

用到的jar包:

 

 

 

poi 下载地址:http://poi.apache.org/

根据查询条件的选择显示相应数据到页面,并把数据可导入到Excel表中
首先根据查询条件显示数据
选择导出Excel将根据查询条件返回数据并通过流写入Excel文件中,核心代码如下:

[java] view plaincopy
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%@ taglib prefix=”s” uri=”/struts-tags” %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base href=”<%=basePath%>”>

<title>My JSP ‘list_export.jsp’ starting page</title>

<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>

<mce:script type=”text/javascript”><!–
function toExport(obj){
obj.form.act.value = “export”;
obj.form.submit();
}

function toQuery(obj) {
obj.form.act.value = “query”;
var v =document.getElementById (‘form1′);
// alert(v);
v.action=”criteriaQuery.action”;
//alert(v.action);
obj.form.submit();
}
// –></mce:script>
</head>

<body style=”overflow-x:hidden;overflow-y:auto;” mce_style=”overflow-x:hidden;overflow-y:auto;”>
<form name=”form” method=”post” id=”form1″ action=”queryExport.action”>
<table align=”center” width=”%100″>
<tr>
<td>姓名:<s:textfield name=”pram_name” value=”%{#parameters.pram_name}” theme=”simple”/></td>
<td>年龄:<s:textfield name=”pram_age” value=”%{#parameters.pram_age}” theme=”simple”/></td>
<td>地址:<s:textfield name=”pram_address” value=”%{#parameters.pram_address}” theme=”simple”/> </td>
</tr>
<tr align=”right” >
<td colspan=”3″>
<input type=”button” value=” 查询 ” onclick=”toQuery(this)”>
</td>
</tr>
</table>
<input type=”hidden” id=”act” name=”act” >

</form>

<table id=”content” cellSpacing=”1″ cellPadding=”0″ width=”100%” border=”0″>
<tr>
<td align=”center”>姓名</td>
<td align=”center”>年龄</td>
<td align=”center”>地址</td>

</tr>
<s:iterator value=”userInfos”>
<tr>
<td align=”center”><s:property value=”name” /></td>
<td align=”center”><s:property value=”age” /></td>
<td align=”center”><s:property value=”address” /></td>
</tr>
</s:iterator>

</table>
<table width=”100%” border=”0″ cellspacing=”0″ cellpadding=”0″>
<tr>
<td height=”10″></td>
</tr>
<tr>
<td height=”25″ align=”left”>
<a href=”javascript:toExport(this);” mce_href=”javascript:toExport(this);”><font color=”#2469D7″>导出…</font></a></td>
</tr>
</table>
</body>
</html>

struts.xml

[xhtml] view plaincopy
<?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>

<constant name=”struts.enable.DynamicMethodInvocation” value=”false” />
<constant name=”struts.devMode” value=”false” />

<package name=”index” namespace=”/” extends=”struts-default”>

<action name=”listExport” class=”com.ywjava.office.action.ListAction”>
<result>
/WEB-INF/page/list_export.jsp
</result>
</action>

<action name=”criteriaQuery” class=”com.ywjava.office.action.QueryExportAction”>
<result>
/WEB-INF/page/list_export.jsp
</result>
</action>

<action name=”queryExport” class=”com.ywjava.office.action.QueryExportAction”>
<result name=”success” type=”stream”>
<!– 文件类型 –>
<param name=”contentType”> application/vnd.ms-excel</param>
<!– excelStream 与对应action中的输入流的名字要一致 –>
<param name= ” inputName”> excelStream</param>
<!– 文件名 与action中fileName一致 –>
<param name=”contentDisposition”>attachment;filename=” ${fileName}.xls”</param>
<param name=”bufferSize”>1024</param>
</result>
<result name=”error”>/WEB-INF/page/msg_error.jsp</result>
</action>
</package>

</struts>

执行queryExport这acion 并设置属性包括操作流,文件名,文件类型等。具体见struts.xml的注释

 


QueryExportAction.java

此action主要用于返回相应数据并通过流写入到新创建的Excel中,具体操作Excel代码如下:

 

[java] view plaincopy
package com.ywjava.office.action;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ywjava.office.domain.User;
import com.ywjava.office.service.UserService;
import com.ywjava.office.service.UserServiceImpl;
import com.ywjava.office.utils.ExportTable;

public class QueryExportAction extends ActionSupport {
private static final String EXPORT = “export”;
private static final String QUERY = “query”;
private String act;
private List<User> userInfos;
private UserService us = new UserServiceImpl();
private HashMap allParamsMap;
private String qry_param_prefix = “pram_”;
// 这个输入流对应上面struts.xml中配置的那个excelStream,两者必须一致
private InputStream excelStream;

private String fileName; //文件名

public String execute() throws Exception {
//获取查询条件
allParamsMap = new HashMap();
ActionContext ctx = ActionContext.getContext();
String qryParamPrefix = qry_param_prefix.toUpperCase();
Iterator it = ctx.getParameters().keySet().iterator();
while (it.hasNext()) {
String keyName = (String) it.next();
if (keyName.toUpperCase().startsWith(qryParamPrefix)) {
String[] vals = (String[]) (ctx.getParameters().get(keyName));
if (vals != null && vals.length > 0) {
allParamsMap.put(keyName, vals[0]); // name,value
}
}
}
if (EXPORT.equals(act)) {
doExport(allParamsMap); // 根据查询条件 export
} else if (QUERY.equals(act)) {
doQuery(allParamsMap); // query
}

return SUCCESS;
}

/**
* 导出方法
*
* @return
* @throws Exception
*/
@SuppressWarnings(“unchecked”)
private String doExport(HashMap paramsMap) throws Exception {
userInfos = us.exportUserInfo(allParamsMap); //获取符合条件的信息
if (userInfos == null) {
return ERROR;
}

else {
HSSFWorkbook workbook = this.getWorkbook(userInfos);
if (workbook != null) {
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
String month_ = new String(“” + month);
if (month < 10) {
month_ = “0″ + month;
}
int day = c.get(Calendar.DAY_OF_MONTH);
String day_ = new String(“” + day);
if (day < 10) {
day_ = “0″ + day;
}
this.workbook2InputStream(workbook, year + “-” + month_ + “-”
+ day_ + “”);
return SUCCESS;
} else {
return ERROR;
}

}
}

/**
* 条件查询
*
* @return
*/
public String doQuery(HashMap paramsMap) {
userInfos = us.getAllUser(paramsMap);
if (userInfos == null) {
return ERROR;
}

return SUCCESS;
}

public String getAct() {
return act;
}

public InputStream getExcelStream() {
return excelStream;
}

public String getFileName() {
return fileName;
}

public UserService getUs() {
return us;
}

public List<User> getUserInfos() {
return userInfos;
}
/**
* 创建一个excel文件。
* @param list
* @return
* @throws Exception
*/
private HSSFWorkbook getWorkbook(List<User> list) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表
HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
HSSFSheet sheet = workbook.createSheet(“sheet1″); // 创建表单
HSSFRow row = sheet.createRow(0); // 创建第一行 title
HSSFCell cell = null;
for (int i = 0; i < ExportTable.columnNames.length; i++) {
cell = row.createCell(i);
cell.setCellValue(ExportTable.columnNames[i]);
cell.setCellStyle(style);
}
// creatExportData

for (int i = 0; i < userInfos.size(); i++) {
row = sheet.createRow(i + 1);//
cell = row.createCell(0);
cell.setCellValue(userInfos.get(i).getId());
cell = row.createCell(1);
cell.setCellValue(userInfos.get(i).getName());
cell = row.createCell(2);
cell.setCellValue(userInfos.get(i).getAge());
cell = row.createCell(3);
cell.setCellValue(userInfos.get(i).getAddress());

}
return workbook;
}

public void setAct(String act) {
this.act = act;
}

public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public void setUs(UserService us) {
this.us = us;
}

public void setUserInfos(List<User> userInfos) {
this.userInfos = userInfos;
}
/*
* 写入流中
*/
public void workbook2InputStream(HSSFWorkbook workbook, String fileName)
throws Exception {
this.fileName = fileName; // 设置文件名
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
baos.flush();
byte[] aa = baos.toByteArray();
excelStream = new ByteArrayInputStream(aa, 0, aa.length);
baos.close();

}
}