`

Java Struts2创建Excel文件并实现文件下载

阅读更多
在做管理系统的时候,经常会用到文件的下载,特别是Excel报表的创建与下载,下面就来简单演示一下,Struts2实现的Excel文件的下载功能。

由于本实验是要动态创建Excel文件,因此需要一些jar:

Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版。

Apache POI 代码例子地址:http://poi.apache.org/spreadsheet/quick-guide.html

1. 配置struts.xml
<struts>
    <package name="export" namespace="/export" extends="struts-default">
        <action name="*" class="excelExportAction" method="{1}"/>

        <!--测试Excel下载-->
        <action name="exportExcel" class="excelExportAction" method="exportExcel">
            <result name="success" type="stream">
                <!-- 下载文件的类型,如果你不知道是什么格式,可以去 tomcat\conf\web.xml下找 -->
                <param name="contentType">application/vnd.ms-excel</param>
                <!-- 返回流 excelStream为action中的流变量名称 -->
                <param name="inputName">excelStream</param>
                <!-- attachment 这个位置的参数挺特殊的,可以设置成下载时,是否出现个下载提示框,或者直接下载之类的。
                fileName指定生成的文件名字(适合动态生成文件名,比如做报表时,一般都要说是几月的统计数据之类)为action中变量-->
                <param name="contentDisposition">
                    attachment;filename=${excelFileName}
                </param>
                <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>


2.编写Action类

POI的Maven配置如下:
<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi</artifactId>
     <version>3.8</version>
</dependency>


3.Action类如下:
import org.apache.poi.hssf.usermodel.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExcelExportAction extends ActionSupport {

    /** 导出Excel测试 */
    public String exportExcel() {
        try {
            //第一步,创建一个webbook,对应一个Excel文件
            HSSFWorkbook wb = new HSSFWorkbook();
            //第二步,在webbook中添加一个sheet,对应Excel文件中的 sheet
            HSSFSheet sheet = wb.createSheet("测试表格1");
            //第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
            HSSFRow row = sheet.createRow(0);
            //第四步,创建单元格样式:居中
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            //第五步,创建表头单元格,并设置样式
            HSSFCell cell;

            cell = row.createCell(0);
            cell.setCellValue("员工工号");
            cell.setCellStyle(style);

            cell = row.createCell(1);
            cell.setCellValue("员工姓名");
            cell.setCellStyle(style);

            cell = row.createCell(2);
            cell.setCellValue("所属部门");
            cell.setCellStyle(style);

            cell = row.createCell(3);
            cell.setCellValue("职位");
            cell.setCellStyle(style);

            cell = row.createCell(4);
            cell.setCellValue("入职日期");
            cell.setCellStyle(style);

            cell = row.createCell(5);
            cell.setCellValue("备注");
            cell.setCellStyle(style);

            //第六步,写入实体数据,实际应用中这些数据从数据库得到
            Date today = new Date();
            long aDay = 1000L*60*60*24;
            SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
            for (int i = 1; i <= 10; i++) {
                row = sheet.createRow(i);
                row.createCell(0).setCellValue(i);
                row.createCell(1).setCellValue("员工" + i);
                row.createCell(2).setCellValue("总公司");
                row.createCell(3).setCellValue("普通员工");
                row.createCell(4).setCellValue(fmt.format(new Date(today.getTime() + i * aDay)));
                row.createCell(5).setCellValue("员工备注");
            }

            //第七步,将文件存到流中
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            wb.write(os);
            byte[] fileContent = os.toByteArray();
            ByteArrayInputStream is = new ByteArrayInputStream(fileContent);

            excelStream = is;             //文件流
            excelFileName = "report.xls"; //设置下载的文件名
        }
        catch(Exception e) {
            e.printStackTrace();
        }

        return "success";
    }


    //-------------------------------------------------------------
    private InputStream excelStream;  //输出流变量
    private String excelFileName; //下载文件名

    public InputStream getExcelStream() {
        return excelStream;
    }
    public void setExcelStream(InputStream excelStream) {
        this.excelStream = excelStream;
    }
    public String getExcelFileName() {
        return excelFileName;
    }
    public void setExcelFileName(String excelFileName) {
        this.excelFileName = excelFileName;
    }
}


参考网址:
http://blog.csdn.net/zht666/article/details/11091505
分享到:
评论
1 楼 herodie4444 2017-09-28  
看起来好像不难。

相关推荐

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    web中使用POI导入导出EXCEL文件的例子 struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet....

    java版Excel文件导入数据库源代码

    java版Excel文件导入数据库源代码 servlet容器:tomcat(或者其他) 数据库:oracle(或者其他) 使用框架:jsp+struts1.2 支持字符型/数据型/日期型/CLOB等数据 使用步骤: 1.下载本资源,解压后得到4个文件:...

    jxlreport web组件

    在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,并要求在浏览器中展现报表,通过开放源码项目——Java Excel API简称JXL,使用它大家就可以方便地操纵Excel文件了。实现Excel项目报表的处理。 ...

    java开发常用jar包

    Apache Commons包中的一个,通过它可以很方便的解析xml文件生成java对象 aspectjrt.jar 和aspectjweaver.jar Annotation 方式实现 AOP commons-dbcp.jar commons-pool-1.2.jar DBCP数据库连接池 cglib-nodep-2.1_...

    使用freemarker生成word文档,源代码+jar包+说明文档及注意事项

    使用freemarker生成word ,并集成struts2 同时生成及下载文档 资料附有Java源代码和自己总结的使用说明及注意事项 大至预览如下: 1、用word编辑好模板 普通字符串替换为 ${string} 表格循环用标签 姓名:${...

    java web 开发详解

    Java 的 Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向抽象实现请求和响应的...

    java web 视频、电子书、源码(李兴华老师出版)

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置...

    李兴华Java Web开发实战经典(高清版) Part2

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat...

    web项目常用jar包及说明.zip

    Struts 2需要的jar包: 1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    18.2.2、创建一个Excel文件 18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat...

    Rohan-Pillai-Blog-Files:该存储库包含我在博客中编写了教程的所有文件

    LoginUsingStruts-使用Struts 2 Framework创建登录表单(在NetBeans 8.2中开发) 距离-时间计算器-使用Google Maps API计算网站中2个点之间的距离和时间。 Java中的远程方法调用(RMI)-构建分布式应用程序。 ...

    Spring中文帮助文档

    14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的参数 15. 集成...

    poi最新版本及收集的帮助资料

    java的POI操作Excel文件.doc POI_API帮助文档.chm poi-bin-3.9-20121203.tar.gz poi帮助.docx POI中文帮助文档.pdf poi中文教程.doc第一章 POI简介 实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为...

Global site tag (gtag.js) - Google Analytics