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

用到的jar包:

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();
  • }
  • }

struts2+hibernate+poi导出Excel实例的更多相关文章

  1. 使用struts2和poi导出excel文档

    poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1  ...

  2. [转载]poi导出excel,可以自定义保存路径

    poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...

  3. POI导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  4. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

  5. POI导出EXCEL经典实现(转)

    http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...

  6. Struts2使用POI创建Excel并下载

    本文将讲解在Struts2框架下如何使用POI创建Office Excel文档并实现下载功能. Apache POI ,操作微软文档的Java API,简单来说就是可以用来操作Office文档的API ...

  7. poi导出excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  8. POI导出excel的简单demo

    目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...

  9. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

随机推荐

  1. C#子线程刷新界面并关闭窗体

    目的:要循环刷新界面上的控件,同时不影响用户操作.循环结束后关闭窗体. 步骤:先创建一个窗体,窗体中拖入一个lable控件(label1),一个button控件(button1) 代码窗口输入: // ...

  2. java生成随机字符串uuid

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  3. Android Intent 用法全面总结

    [代码全屏查看]-Android Intent 用法全面总结 // [1].[代码] 调用拨号程序 跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] / ...

  4. SqlDataAdapter怎么处理事务呢

    SqlDataAdapter怎么处理事务呢,没找到相关代码,哪位朋友能提供下   解决方案 » this._DBAdpt-------------SqlDataAdapterthis._DBConn- ...

  5. 【hibernate】之标注枚举类型@Enumerated(转载)

    实体Entity中通过@Enumerated标注枚举类型,例如将CustomerEO实体中增加一个CustomerType类型的枚举型属性,标注实体后的代码如下所示. @Entity @Table(n ...

  6. C语言每日一题之No.4

    这几天老大也没安排我什么项目,于是想正好趁着空补C.当然,是利用晚上加班时间,白天正常上班时间还是学习公司的平台. 今儿个突然弱弱的感觉到在公司补C是件很低级的事情,哪怕是在加班时间都会被喷,因为大家 ...

  7. 【转】c# winform DataGridView导出数据到Excel中,可以导出当前页和全部数据

    准备工作就是可以分页的DataGridView,和两个按钮,一个用来导出当前页数据到Excel,一个用来导出全部数据到Excel 没有使用SaveFileDialog,但却可以弹出保存对话框来 先做导 ...

  8. 黄聪:利用Aspose.Word控件实现Word文档的操作(转)

    撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及 ...

  9. setValue:forUndefinedKey

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewControlle ...

  10. CF 500 C. New Year Book Reading 贪心 简单题

    New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n b ...