本文将讲解在Struts2框架下如何使用POI创建Office Excel文档并实现下载功能。

Apache POI ,操作微软文档的Java API,简单来说就是可以用来操作Office文档的API.

Apache POI官网:http://poi.apache.org/

Apache POI Jar包官方下载:http://poi.apache.org/download.html

效果截图:

1.创建一个Java Web工程并配置Struts2环境,详细步骤省略。。。

注意:引入POI jar包,此工程中只需要poi-3.13.jar即可。

jar包:

2.修改index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>首页</title>
</head> <body>
<a href="exportExcel.action">下载</a>
</body>
</html>

3.修改Struts.xml配置如下:

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!--配置包时必须指定name属性,该属性值可以任意取名,但必须唯一。 -->
<package name="aynu" extends="struts-default"> <!--测试Excel下载 -->
<action name="exportExcel" class="com.xingyun.action.ExcelExportAction"
method="exportExcel">
<result name="success" type="stream">
<!-- 下载文件的类型,文件类型对照表参看 http://tool.oschina.net/commons -->
<param name="contentType">application/vnd.ms-excel</param>
<!-- 返回流 excelStream为action中的流变量名称 -->
<param name="inputName">excelStream</param>
<!-- 文件下载的处理方式,包括内联(inline)和附件(attachment) 提示下载 -->
<param name="contentDisposition">attachment;filename=${excelFileName}</param>
<param name="bufferSize">2048</param>
</result>
</action>
</package> </struts>

4.创建Action类

 package com.xingyun.action;
import org.apache.poi.hssf.usermodel.*; import com.opensymphony.xwork2.ActionSupport; 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;
}
}

5.启动Tomcat并发布后打开浏览器

http://127.0.0.1:8080/Struts2POIDownLoadExcelDemo/

效果图如下:

下载后打开文件效果图:


Struts2使用POI创建Excel并下载Demo.ZIP

源码下载:http://pan.baidu.com/s/1i3TXa8t 密码:3mmw

Struts2使用POI创建Excel并下载的更多相关文章

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

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  2. struts2+hibernate+poi导出Excel实例

    本实例通过struts2+hibernate+poi实现导出数据导入到Excel的功能 用到的jar包: poi 下载地址:http://poi.apache.org/ 根据查询条件的选择显示相应数据 ...

  3. 使用struts2和poi导出excel文档

    poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1  ...

  4. java使用poi创建excel文件

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

  5. POI导出excel并下载(以流的形式在客户端下载,不保存文件在服务器上)

    import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; i ...

  6. java POI创建Excel示例(xslx和xsl区别 )

    Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...

  7. 在Struts2中使用poi进行excel操作下载的时候报getOutputStream() has already been called for this response 错误 [转]

    在项目中用到了poi这个开源的操作excel文件的jar. 项目中用到struts2容器管理servlet.不是单纯的直接用servlet.         workbook.write(os);   ...

  8. 使用POI创建Excel文件下载

    POIExcelUtils.java: package com.saicfc.pmpf.internal.manage.utils; import java.io.File; import java. ...

  9. POI导出Excel并下载

    首先在pom.xml添加jar包: <!-- 导出excel --> <dependency> <groupId>org.apache.poi</groupI ...

随机推荐

  1. CSS3box-shadow属性的使用

    每次使用box-shadow,都要查阅资料才能实现对应的效果,现在总结一下,方便以后查看. 一.语法: E {box-shadow: inset x-offset y-offset blur-radi ...

  2. CSS3的writing-mode属性

    writing-mode这个CSS属性以前是IE的独有属性,IE5.5浏览器就已经支持了.在很长一段时间里,FireFox, Chrome这些现代浏览器都不支持writing-mode,各大现代浏览器 ...

  3. Error: spawn xxxx ENOENT原因与解决

    背景: npm 运行项目时出现了该问题 原因: path环境变量配置不当,导致无法找到指定的程序,如Error: spawn cmd.exe ENOENT,出现该问题的原因是因为没有将%SystemR ...

  4. AC日记——乘积最大 洛谷 P1018

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  5. Cryptography I 学习笔记 --- 绪论

    课程地址 1. 密码学可以用于保证消息传递的机密性(第三方不可能得到明文)与完整性(密文如果被第三方篡改,有手段可以检测到) 2. 数字签名(用私钥加密待签名文件的hash值) 3. 匿名通信(mix ...

  6. Django 利用 Pagination 分页

    Django自身提供了一些类来实现管理分页,数据被分在不同的页面中,并带有“上一页/下一页”标签.这个类叫做Pagination,其定义位于 django/core/paginator.py 中. 一 ...

  7. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

  8. Codeforces Gym101502 B.Linear Algebra Test-STL(map)

    B. Linear Algebra Test   time limit per test 3.0 s memory limit per test 256 MB input standard input ...

  9. MX

    A mail exchanger record (MX record) is a type of resource record in the Domain Name System that spec ...

  10. django使用logging记录日志

    django使用logging记录日志,我没有用这方式去记录日志,主要还是项目小的原因吧, 有机会遇见大项目的话可以回头研究. 配置setting.py配置文件 import logging impo ...