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;
    }
    }

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

  • 相关阅读:
    HDU 1850 Being a Good Boy in Spring Festival
    UESTC 1080 空心矩阵
    HDU 2491 Priest John's Busiest Day
    UVALive 6181
    ZOJ 2674 Strange Limit
    UVA 12532 Interval Product
    UESTC 1237 质因子分解
    UESTC 1014 Shot
    xe5 android listbox的 TMetropolisUIListBoxItem
    xe5 android tts(Text To Speech)
  • 原文地址:https://www.cnblogs.com/llq5/p/5178992.html
Copyright © 2011-2022 走看看