`
zhangsibei
  • 浏览: 15655 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2 excel导出

 
阅读更多
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;



/**
 * 自定义的result 该类主要提供EXCEL文档的导出功能

 */
public class ExcelResult implements Result
{

	/**
	 *
	 */
	private static final long serialVersionUID = 1569392110700217637L;
	private String[] title;
	private String[] column;
	private ArrayList<Map> data;
	private String fileName;
	private HttpServletResponse rep;
	private OutputStream outputStream;

	@SuppressWarnings("unchecked")
	public void execute(ActionInvocation invocation) throws Exception
	{
		title = (String[]) invocation.getStack().findValue("title");
		column = (String[]) invocation.getStack().findValue("column");
		data = (ArrayList<Map>) invocation.getStack().findValue("data");
		fileName = (String) invocation.getStack().findValue("fileName");
		if (title == null)
		{
			throw new NullPointerException("没有定义标题集合,或者没有提供get方法");
		}
		if (column == null)
		{
			throw new NullPointerException("没有定义字段集合,或者没有提供get方法");
		}
		if (data == null)
		{
			throw new NullPointerException("没有定义导出数据结果集合,或者没有提供get方法");
		}
		if (fileName == null)
		{
			throw new NullPointerException("没有定义输出文件名,或者没有提供get方法");
		}
		rep = ServletActionContext.getResponse();
		rep.reset();
		// 设置文件下载参数
		rep.setContentType("application/vnd.ms-excel; charset=GBK");
		rep.setCharacterEncoding("GBK");
		rep.setHeader("Content-Disposition", "attachment; filename="
				+ URLEncoder.encode(fileName + ".xls", "UTF-8"));
		// 得到输出流
		outputStream = rep.getOutputStream();
		getOutputFile();
	}

	/**
	 * 将数据转化成输出流
	 */
	private void getOutputFile()
	{
		// 将结果集转化为Excel输出
		HSSFWorkbook wwb = null;
		try
		{
			// 创建工作表
			wwb = new HSSFWorkbook();
			HSSFSheet ws = null;
			HSSFRow row = null;
			HSSFCell cell = null;
			Iterator it = data.iterator();
			int i = 0;
			// 在第一页第一行添加标题
			ws = wwb.createSheet("Sheet0");
			row = ws.createRow(0);
			// 在每页的第一行输入标题
			for (int m = 0; m < title.length; m++)
			{
				cell = row.createCell((short) m);
				cell.setCellValue(new HSSFRichTextString(title[m]));
			}
			int k = 0;
			// 逐行添加数据
			while (it.hasNext())
			{
				// 每10000条记录分一页
				if (i / 10000 > k)
				{
					k = i / 10000;
					ws = wwb.createSheet("Sheet" + k);
					row = ws.createRow(0);
					// 在每页的第一行输入标题
					for (int l = 0; l < title.length; l++)
					{
						cell = row.createCell((short) l);
						cell.setCellValue(new HSSFRichTextString(title[l]));
					}
				}
				Map dataMap = (Map) it.next();
				row = ws.createRow(i - 10000 * k + 1);
				// 输出数据
				for (int j = 0; j < column.length; j++)
				{
					cell = row.createCell((short) j);
					// 按字段取值
					String columnName = column[j];
					cell.setCellValue(new HSSFRichTextString(
							getValue(dataMap, columnName)));
				}
				i++;
			}
			// 写入流
			wwb.write(outputStream);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				outputStream.close();
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * 处理null值
	 * @param dataMap
	 * @param columnName
	 * @return
	 */
	private String getValue(Map dataMap, String columnName)
	{
		return (dataMap.get(columnName) == null || String
				.valueOf(dataMap.get(columnName)).equalsIgnoreCase("null")) ? "" : String
				.valueOf(dataMap.get(columnName)).trim();
	}
}

 

 在公共配置文件中将导出的文件类型定义为excel,那么将在调用类的配置文件中如下调用

<result name="excel" type="excel"></result>

 action中的代码为

	private String[] title; // 显示在导出文档上的列名
	private String fileName;
	private String[] column; // 需要导出的列名,对应data中的键值
	private List<Map> data; // 需要导出的结果集,必须是处理过的可以直接显  示的结果

 

title = new String[7];
		title[0] = "日期";
		title[1] = "产品";
		title[2] = "批次";

column = new String[7];
		column[0] = "date";
		column[1] = "product";
		column[2] = "model";

data = xxxBIO.getList();

fileName = "aaaa";

 注意:在页面的时候不能ajax提交,否则导出不了

分享到:
评论

相关推荐

    struts2实现excel导出

    在Struts2框架中,实现Excel导出的功能主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。以下将详细介绍如何利用Struts2和POI实现Excel导出。 首先,你需要在项目中引入Apache POI库。...

    struts2 poi导出到excel

    Struts2和Apache POI是Java开发中处理Web应用程序数据导出到Excel的常用工具。Struts2是一个基于MVC设计模式的Java EE框架,它提供了强大的动作控制、拦截器和结果类型等功能,使得Web应用的开发更加简洁高效。而...

    struts2导出excel java 导出excel JXL

    struts2导出excel java 导出excel: JXL_excel: 可以直接在elipse下运行的例子 可以直接导出excel文件(包含所需的jar包) CSharpJExcel: 是JXL的官方下载的 包括详细的文档 和jar包

    Struts2 Excel导入导出数据

    本教程将深入探讨如何利用Struts2实现从Oracle数据库导出数据到Excel,以及如何将Excel文件中的数据导入到Oracle。 首先,我们需要了解Oracle数据库的基础知识。Oracle是世界上最广泛使用的商业关系型数据库管理...

    JSP Struts2 分页 导出Excel

    本教程将介绍如何使用这两者结合jQuery来实现数据查询、分页以及Excel导出功能。 1. **JSP基础** JSP是一种服务器端脚本语言,用于生成动态HTML页面。开发者可以在JSP文件中混合使用HTML、Java代码和自定义标签库...

    整合struts2 ssh导出excel

    本篇文章将深入探讨如何在Struts2与SSH框架下实现Excel文件的导出。 首先,导出Excel是Web应用中常见的需求,通常用于报表生成或数据批量下载。在Struts2中,我们可以利用Apache POI库来操作Microsoft Office的XML...

    Struts2+Excel导出Demo,测试可用带JAR包

    这个"Struts2+Excel导出Demo"是一个实用的教学案例,可以帮助开发者理解如何在Java Web应用中集成Struts2和Excel导出功能。通过学习和实践这个Demo,开发者可以快速掌握相关技术,提高工作效率。

    struts2导出excel笔记

    在Struts2中,导出Excel是常见的需求,通常用于数据报表或数据分析。这篇笔记将探讨如何在Struts2中实现Excel的导出功能。 首先,我们需要了解Excel的基本概念。Excel是由Microsoft开发的一款电子表格软件,广泛...

    struts2Ecxel导入导出

    三、Excel导出 1. 创建Excel工作簿:使用POI创建HSSFWorkbook或XSSFWorkbook对象。 2. 添加工作表:使用Workbook的createSheet()方法添加新的工作表。 3. 写入数据:通过Row和Cell对象将数据写入工作表。创建Row,...

    struts2+poi实现excel表格导出

    除了基础的Excel导出,还可以实现更多高级功能,比如合并单元格、插入图表、设置条件格式等。同时,对于更现代的XLSX格式,Apache POI也提供了对应的接口(如XSSFWorkbook)。 通过以上讲解,我们可以看到,结合...

    Excel 导出 struts2 spring hibernate

    在Excel导出场景下,Action类将执行导出逻辑,并通过结果配置将生成的Excel文件返回给浏览器。 2. **Spring**:Spring可以作为依赖管理容器,将Struts2的Action与服务层(Service)组件进行依赖注入。同时,Spring...

    struts2中利用poi导出excel

    本篇文章将深入探讨如何在Struts2框架中使用POI库来导出Excel文件。 首先,我们需要在项目中引入Apache POI库。可以通过Maven或Gradle将其添加到构建文件中。对于Maven,可以在pom.xml文件中添加以下依赖: ```xml...

    struts,poi导出excel

    在 Java 开发中,如果你需要导出数据到 Excel,Apache POI 提供了高效的 API 来实现这一功能。在本文中,我们将深入探讨如何使用 POI 组件来创建和操作 Excel 文档。 1. **创建 Excel 文档对象** 创建一个 Excel ...

    Struts2文件流方式导出下载excel、Txt、image图片

    通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...

    Excel导出工具类

    为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache POI库创建一个能够处理`List&lt;Object&gt;`数据的Excel工具类。 Apache POI是一个流行...

    excel导出支持前台和后台导出

    在IT行业中,Excel导出是一项常见的功能,尤其在企业级应用中,用于数据报表的生成与分享。"Excel导出支持前台和后台导出"这一技术主题涉及到...结合Struts2框架,我们可以轻松地在后台实现高效、可控的Excel导出功能。

    struts2导出excel.rar

    本压缩包"struts2导出excel.rar"提供了关于如何在Struts2框架中实现Excel导出功能的相关资源。 1. **Struts2框架基础** Struts2是一个基于MVC(Model-View-Controller)设计模式的Java框架,它简化了MVC的实现,...

    POI + Struts2 实现Excel导出工具包

    在Java开发中,导出...总结来说,Apache POI与Struts2的结合使用,使得在Java Web应用中实现Excel导出变得简单高效。通过理解这两个库的核心概念和API,你可以定制化地生成符合业务需求的Excel报表,提升工作效率。

    Struts2 poi动态导入导出Excel源码示例

    首先,让我们深入理解一下如何使用Struts2和POI来实现Excel的导入导出。 1. **Struts2的Action配置**: 在Struts2中,你需要创建一个Action类来处理用户请求。这个Action类会有一个方法,专门处理导入或导出Excel...

Global site tag (gtag.js) - Google Analytics