zoukankan      html  css  js  c++  java
  • Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载
    2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报
    分类: Java EE(49) Struts(6)
    版权声明:本文为博主原创文章,未经博主允许不得转载。
    在做管理系统的时候,经常会用到文件的下载,特别是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">
    <!-- 下载文件的类型,如果你不知道是什么格式,可以去 tomcatconfweb.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;
    }
    }

    注:本文参考了网上的一篇文章,但是忘记地址了,对作者深表歉意。

  • 相关阅读:
    又见Dooyoul
    用premake编译跨平台opencv程序
    [try it] 使用Apache Ant
    用OllyDbg做破解
    什么是SEO
    SEO最新百度排名算法调整
    SEO网站外链的建设
    SEO网站title优化
    网站title优化应注意的细节
    [ios]设置ARC 【转】
  • 原文地址:https://www.cnblogs.com/llq5/p/5178992.html
Copyright © 2011-2022 走看看