您的位置:首页 > 编程语言 > Java开发

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

2017-11-27 11:09 267 查看
出处:http://blog.csdn.net/zht666/article/details/11091505

在做管理系统的时候,经常会用到文件的下载,特别是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

[html] view
plain copy

<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配置如下:

[html] view
plain copy

<dependency>  

     <groupId>org.apache.poi</groupId>  

     <artifactId>poi</artifactId>  

     <version>3.9</version>  

</dependency>  

Action类如下:

[java] view
plain copy

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;  

    }  

}  

注:本文参考了网上的一篇文章,但是忘记地址了,对作者深表歉意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts java poi excel