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">
<!-- 下载文件的类型,如果你不知道是什么格式,可以去 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;
}
}

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

Java Struts2 POI创建Excel文件并实现文件下载的更多相关文章

  1. java使用poi创建excel文件

    import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import or ...

  2. Java通过poi创建Excel文件并分页追加数据

    以下的main函数,先生成一个excel文件,并设置sheet的名称,设置excel头:而后,以分页的方式,向文件中追加数据 maven依赖 <dependency> <groupI ...

  3. java通过poi编写excel文件

    public String writeExcel(List<MedicalWhiteList> MedicalWhiteList) { if(MedicalWhiteList == nul ...

  4. java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

    需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...

  5. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  6. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  7. Java使用POI操作Excel文件

    1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...

  8. Java实现POI读取Excel文件,兼容后缀名xls和xlsx

    1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...

  9. java利用poi生成excel文件后下载本地

    1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...

随机推荐

  1. VBS实现定时发送邮件

    原理:建立CDO.Message对象,设置好参数后直接Send就可以了 代码如下: NameSpace = "http://schemas.microsoft.com/cdo/configu ...

  2. asp.net的JSONHelper 类

    调用方法: ){    jsons = json.ToString();}else{    jsons = @"{success:false}";}return jsons; JS ...

  3. 编译FFmpeg成一个SO库<转>

    转帖地址:http://www.ihubin.com/blog/android-ffmpeg-demo-3/ ============================================= ...

  4. tp框架总结(二)

    一.函数库和类库 项目中的常用的函数库要封装到项目Common/function.php中  在项目中可以直接调用  [ 函数();] import方法是ThinkPHP内建的类库导入方法,提供了方便 ...

  5. ASP.NET 访问母版页元素总结

    第一种方法: 在母版页里面新建一个Label控件 <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="s ...

  6. PHP 7 的新特性

    PHP7是最新出来的一个新的PHP的一个版本,而且新增了一些新的版本特性,下面我们来介绍一下: 1.速度上比HHVM会快一些,大概是PHP5版本的9倍左右,下面是做的一个实验: <?php $a ...

  7. Linux 之集群 LVS

    查看系统是否支持IPVS功能 [root@nginx ~]# grep -i 'ipvs' /boot/config-2.6.18-308.el5 # IPVS transport protocol ...

  8. JS中this的指向问题&使用call或apply模拟new

    this的指向由调用时决定而不是定义时决定,定义的方式: //直接定义在函数里 var a="window中的a"; var name="window"; fu ...

  9. Sql Server隔离级别(2)

    Sql Server2005之后,引入了一个新的隔离级别Snapshot(Read Committed Snapshot Isolation (RCSI))和(Snapshot Isolation ( ...

  10. m.jd.com首页中的js效果

    m.jd.com中的部分js效果 昨天把m.jd.com的首页布局写好了,今天写一下首页中部分js效果.头部背景色透明度的改变,焦点图轮播,京东快报的小轮播,以及秒杀倒计时.这里html,css样式就 ...