struts2+hibernate+poi导出Excel实例

时间:2023-03-09 04:35:12
struts2+hibernate+poi导出Excel实例

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

用到的jar包:

struts2+hibernate+poi导出Excel实例

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

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

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11. <title>My JSP 'list_export.jsp' starting page</title>
  12. <meta http-equiv="pragma" content="no-cache">
  13. <meta http-equiv="cache-control" content="no-cache">
  14. <meta http-equiv="expires" content="0">
  15. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  16. <meta http-equiv="description" content="This is my page">
  17. <mce:script type="text/javascript"><!--
  18. function toExport(obj){
  19. obj.form.act.value = "export";
  20. obj.form.submit();
  21. }
  22. function toQuery(obj) {
  23. obj.form.act.value = "query";
  24. var v =document.getElementById ('form1');
  25. // alert(v);
  26. v.action="criteriaQuery.action";
  27. //alert(v.action);
  28. obj.form.submit();
  29. }
  30. // --></mce:script>
  31. </head>
  32. <body style="overflow-x:hidden;overflow-y:auto;" mce_style="overflow-x:hidden;overflow-y:auto;">
  33. <form name="form" method="post"  id="form1" action="queryExport.action">
  34. <table align="center" width="%100">
  35. <tr>
  36. <td>姓名:<s:textfield name="pram_name"  value="%{#parameters.pram_name}"  theme="simple"/></td>
  37. <td>年龄:<s:textfield name="pram_age"  value="%{#parameters.pram_age}"  theme="simple"/></td>
  38. <td>地址:<s:textfield name="pram_address"  value="%{#parameters.pram_address}"  theme="simple"/> </td>
  39. </tr>
  40. <tr align="right"  >
  41. <td  colspan="3">
  42. <input type="button" value=" 查询 " onclick="toQuery(this)">
  43. </td>
  44. </tr>
  45. </table>
  46. <input type="hidden"  id="act" name="act" >
  47. </form>
  48. <table id="content" cellSpacing="1" cellPadding="0" width="100%"   border="0">
  49. <tr>
  50. <td align="center">姓名</td>
  51. <td align="center">年龄</td>
  52. <td align="center">地址</td>
  53. </tr>
  54. <s:iterator value="userInfos">
  55. <tr>
  56. <td align="center"><s:property value="name" /></td>
  57. <td align="center"><s:property value="age" /></td>
  58. <td align="center"><s:property value="address" /></td>
  59. </tr>
  60. </s:iterator>
  61. </table>
  62. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  63. <tr>
  64. <td height="10"></td>
  65. </tr>
  66. <tr>
  67. <td height="25" align="left">
  68. <a href="javascript:toExport(this);" mce_href="javascript:toExport(this);"><font color="#2469D7">导出...</font></a></td>
  69. </tr>
  70. </table>
  71. </body>
  72. </html>

<%@ 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

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  7. <constant name="struts.devMode" value="false" />
  8. <package name="index" namespace="/" extends="struts-default">
  9. <action name="listExport" class="com.ywjava.office.action.ListAction">
  10. <result>
  11. /WEB-INF/page/list_export.jsp
  12. </result>
  13. </action>
  14. <action name="criteriaQuery" class="com.ywjava.office.action.QueryExportAction">
  15. <result>
  16. /WEB-INF/page/list_export.jsp
  17. </result>
  18. </action>
  19. <action name="queryExport" class="com.ywjava.office.action.QueryExportAction">
  20. <result name="success" type="stream">
  21. <!-- 文件类型 -->
  22. <param name="contentType"> application/vnd.ms-excel</param>
  23. <!-- excelStream 与对应action中的输入流的名字要一致 -->
  24. <param name= " inputName"> excelStream</param>
  25. <!-- 文件名 与action中fileName一致 -->
  26. <param name="contentDisposition">attachment;filename=" ${fileName}.xls"</param>
  27. <param name="bufferSize">1024</param>
  28. </result>
  29. <result name="error">/WEB-INF/page/msg_error.jsp</result>
  30. </action>
  31. </package>
  32. </struts>

<?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代码如下:

  1. package com.ywjava.office.action;
  2. 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();
  • }
  • }