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

poi 下载地址:http://poi.apache.org/
根据查询条件的选择显示相应数据到页面,并把数据可导入到Excel表中
首先根据查询条件显示数据
选择导出Excel将根据查询条件返回数据并通过流写入Excel文件中,核心代码如下:
- <%@ 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>
<%@ 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
- <?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>
<?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代码如下:
- 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();
- }
- }
struts2+hibernate+poi导出Excel实例的更多相关文章
- 使用struts2和poi导出excel文档
poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1 ...
- [转载]poi导出excel,可以自定义保存路径
poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...
- POI导出EXCEL经典实现
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- 重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
- POI导出EXCEL经典实现(转)
http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...
- Struts2使用POI创建Excel并下载
本文将讲解在Struts2框架下如何使用POI创建Office Excel文档并实现下载功能. Apache POI ,操作微软文档的Java API,简单来说就是可以用来操作Office文档的API ...
- poi导出excel
Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...
- POI导出excel的简单demo
目前使用过两种导出excel的方式,一种是如题所示的使用POI的方式进行数据的导出,这种方式一般只有在处理比较多的数据或者说需要导出的excel表格中有图片之类的需要特殊处理的文件的时候使用:还有一种 ...
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
随机推荐
- scanf与scanf_s
scanf的使用 使用scanf需要记住下面两条简单规则: 如果使用scanf来读取某种基本变量类型(%d,%c,%f,%lf)的值,请在变量名之前加上一个& 如果使用scanf把一个字符串( ...
- Spring boot配合Spring session(redis)遇到的错误
背景:本MUEAS项目,一开始的时候,是没有引入redis的,考虑到后期性能的问题而引入.之前没有引用redis的时候,用户登录是正常的.但是,在加入redis支持后,登录就出错!错误如下: . __ ...
- EditText使用详解-包含很多教程上看不到的功能演示
写道 标题有点大,说是详解,其实就是对EditText的一些常用功能的介绍,包括密码框,电话框,空白提示文字等等的讲解,尽量的介绍详细一点,也就是所谓的详解了..呵呵 广告一下我的应用“我团”,最新1 ...
- 基本的 HTML 标签 - 四个实例
本章通过实例向您演示最常用的 HTML 标签. 提示:不要担心本章中您还没有学过的例子,您将在下面的章节中学到它们. 提示:学习 HTML 最好的方式就是边学边做实验.我们为您准备了很好的 HTML ...
- 【Hadoop环境搭建】Centos6.8搭建hadoop伪分布模式
阅读目录 ~/.ssh/authorized_keys 把公钥加到用于认证的公钥文件中,authorized_keys是用于认证的公钥文件 方式2: (未测试,应该可用) 基于空口令创建新的SSH密钥 ...
- 【转】双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计
架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.此架构主要是由kee ...
- rabbitmq例子
安装 sudo apt-get install rabbitmq-server 开启后台管理 sudo rabbitmq-plugins enable rabbitmq_management;sudo ...
- Android框架
http://blog.163.com/vicent_zxb/blog/static/1858861312011488262665/ (一)Android系统框架详解 Android采用分层的架构,分 ...
- (WPF) MVVM: 动态添加控件及绑定。
比如需要显示一个键盘,里面有各个按键.实现的效果如下: 之前的思路,就是建立一个singleKey的控件,然后在后台用代码动态的添加到父控件里去, 再用代码在后台进行绑定. 这种实现方法并不是真正的M ...
- ERP_Oracle Erp 11i 和 R12的区别概述(概念)
2014-06-26 Created By BaoXinjian