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导出的功能主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。以下将详细介绍如何利用Struts2和POI实现Excel导出。 首先,你需要在项目中引入Apache POI库。...
Struts2和Apache POI是Java开发中处理Web应用程序数据导出到Excel的常用工具。Struts2是一个基于MVC设计模式的Java EE框架,它提供了强大的动作控制、拦截器和结果类型等功能,使得Web应用的开发更加简洁高效。而...
struts2导出excel java 导出excel: JXL_excel: 可以直接在elipse下运行的例子 可以直接导出excel文件(包含所需的jar包) CSharpJExcel: 是JXL的官方下载的 包括详细的文档 和jar包
本教程将深入探讨如何利用Struts2实现从Oracle数据库导出数据到Excel,以及如何将Excel文件中的数据导入到Oracle。 首先,我们需要了解Oracle数据库的基础知识。Oracle是世界上最广泛使用的商业关系型数据库管理...
本教程将介绍如何使用这两者结合jQuery来实现数据查询、分页以及Excel导出功能。 1. **JSP基础** JSP是一种服务器端脚本语言,用于生成动态HTML页面。开发者可以在JSP文件中混合使用HTML、Java代码和自定义标签库...
本篇文章将深入探讨如何在Struts2与SSH框架下实现Excel文件的导出。 首先,导出Excel是Web应用中常见的需求,通常用于报表生成或数据批量下载。在Struts2中,我们可以利用Apache POI库来操作Microsoft Office的XML...
这个"Struts2+Excel导出Demo"是一个实用的教学案例,可以帮助开发者理解如何在Java Web应用中集成Struts2和Excel导出功能。通过学习和实践这个Demo,开发者可以快速掌握相关技术,提高工作效率。
在Struts2中,导出Excel是常见的需求,通常用于数据报表或数据分析。这篇笔记将探讨如何在Struts2中实现Excel的导出功能。 首先,我们需要了解Excel的基本概念。Excel是由Microsoft开发的一款电子表格软件,广泛...
三、Excel导出 1. 创建Excel工作簿:使用POI创建HSSFWorkbook或XSSFWorkbook对象。 2. 添加工作表:使用Workbook的createSheet()方法添加新的工作表。 3. 写入数据:通过Row和Cell对象将数据写入工作表。创建Row,...
除了基础的Excel导出,还可以实现更多高级功能,比如合并单元格、插入图表、设置条件格式等。同时,对于更现代的XLSX格式,Apache POI也提供了对应的接口(如XSSFWorkbook)。 通过以上讲解,我们可以看到,结合...
在Excel导出场景下,Action类将执行导出逻辑,并通过结果配置将生成的Excel文件返回给浏览器。 2. **Spring**:Spring可以作为依赖管理容器,将Struts2的Action与服务层(Service)组件进行依赖注入。同时,Spring...
本篇文章将深入探讨如何在Struts2框架中使用POI库来导出Excel文件。 首先,我们需要在项目中引入Apache POI库。可以通过Maven或Gradle将其添加到构建文件中。对于Maven,可以在pom.xml文件中添加以下依赖: ```xml...
在 Java 开发中,如果你需要导出数据到 Excel,Apache POI 提供了高效的 API 来实现这一功能。在本文中,我们将深入探讨如何使用 POI 组件来创建和操作 Excel 文档。 1. **创建 Excel 文档对象** 创建一个 Excel ...
通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...
为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache POI库创建一个能够处理`List<Object>`数据的Excel工具类。 Apache POI是一个流行...
在IT行业中,Excel导出是一项常见的功能,尤其在企业级应用中,用于数据报表的生成与分享。"Excel导出支持前台和后台导出"这一技术主题涉及到...结合Struts2框架,我们可以轻松地在后台实现高效、可控的Excel导出功能。
本压缩包"struts2导出excel.rar"提供了关于如何在Struts2框架中实现Excel导出功能的相关资源。 1. **Struts2框架基础** Struts2是一个基于MVC(Model-View-Controller)设计模式的Java框架,它简化了MVC的实现,...
在Java开发中,导出...总结来说,Apache POI与Struts2的结合使用,使得在Java Web应用中实现Excel导出变得简单高效。通过理解这两个库的核心概念和API,你可以定制化地生成符合业务需求的Excel报表,提升工作效率。
首先,让我们深入理解一下如何使用Struts2和POI来实现Excel的导入导出。 1. **Struts2的Action配置**: 在Struts2中,你需要创建一个Action类来处理用户请求。这个Action类会有一个方法,专门处理导入或导出Excel...