关于struts2输出excel表
web.xml:
<web-app id="WebApp_9" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
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>
<constant name="struts.multipart.maxSize" value="20971520000"></constant>
<package name="default" namespace="/" extends="json-default">
<action name="excelAction" class="com.huawei.s2.action.ExcelAction" method="excelTest">
<result name="excelTest" type="stream">
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
</package>
</struts>
WebContent下的jsp(1.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试struts2</title>
</head>
<body>
<a href="excelAction">生成excel</a>
</body>
</html>
action:
public class ExcelAction {
private String fileName;
private InputStream inputStream;
public String excelTest() throws Exception{
Person p1 = new Person(1,"aaa",Date.valueOf("2012-12-12"),2000.0);
Person p2 = new Person(2,"bbb",Date.valueOf("2012-12-12"),2000.0);
Person p3 = new Person(3,"张三",Date.valueOf("2012-02-12"),2000.0);
List<Person> personList = new ArrayList<Person>();
personList.add(p1);
personList.add(p2);
personList.add(p3);
//excel表格浏览器下载时显示的名字
fileName = "测试表格.xls";
//创建生成excel 数据的对象
XLSExport xls = new XLSExport();
String[] tabHeadContent = new String[]{"编号","姓名","入职日期","工资"};
xls.createTable(true, personList, tabHeadContent);
//导出excel
inputStream = xls.exportXLSByStruts();
return "excelTest";
}
public String getFileName() throws Exception{
return new String(fileName.getBytes("gbk"),"iso-8859-1");
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}
po:
public class Person {
private Integer pid;
private String pname;
private Date hiredate;
private Double sal;
public Person(Integer pid, String pname, Date hiredate, Double sal) {
super();
this.pid = pid;
this.pname = pname;
this.hiredate = hiredate;
this.sal = sal;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
util:
public class XLSExport {
// 定制日期格式
private static final String DATE_FORMAT = "m/d/yy h:mm" ; // "m/d/yy h:mm"
// 定制浮点数格式
private static final String NUMBER_FORMAT = " #,##0.00 " ;
private String xlsFileName;
private HSSFWorkbook workbook;
private HSSFSheet sheet;
private HSSFRow row;
/**
* 初始化Excel
*
* @param fileName
* 导出文件名
*/
public XLSExport(String fileName) {
this .xlsFileName = fileName;
this .workbook = new HSSFWorkbook();
this .sheet = workbook.createSheet();
}
public XLSExport() {
this .workbook = new HSSFWorkbook();
this .sheet = workbook.createSheet();
}
public void createTabHeader(String...tabHeadContent){
createRow(0);
for(int i = 0;i<tabHeadContent.length;i++){
setCell(i, tabHeadContent[i]);
}
}
public void createTable(boolean flag,List list,String...tabHeadContent) throws Exception{
if(flag){//如果有表头就创建表头
createTabHeader(tabHeadContent);
}
for(int i = 0;i<list.size();i++){
createRow(flag?i+1:i);//每条数据对应一行
Object obj = list.get(i);
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
for(int j=0;j<fields.length;j++){
Class type = fields[j].getType();
String fieldName = fields[j].getName();
String getter = (type==boolean.class?"is":"get")+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
Method method = clazz.getDeclaredMethod(getter);
Object fieldValue = method.invoke(obj);
if(fieldValue!=null){
if(type==Integer.class||type==int.class){
setCell(j, (Integer)fieldValue);
}else if(type==Double.class||type==double.class){
setCell(j, (Double)fieldValue);
}else if(type==Date.class||type==java.sql.Date.class){
setCell(j, (Date)fieldValue);//一会测试测试
}else if(type==String.class){
setCell(j, (String)fieldValue);//一会测试测试
}
}else{
setCell(j, "");
}
}
}
}
public InputStream exportXLSByStruts()throws Exception{
ByteArrayOutputStream bos = new ByteArrayOutputStream();//这个类ByteArrayOutputStream在这里很重要
workbook.write(bos);
InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());
return inputStream;
}
/**
* 导出Excel文件
*
* @throws XLSException
*/
public void exportXLS() throws XLSException {
try {
FileOutputStream fOut = new FileOutputStream(xlsFileName);
workbook.write(fOut);
fOut.flush();
fOut.close();
} catch (FileNotFoundException e) {
throw new XLSException( " 生成导出Excel文件出错! ");
} catch (IOException e) {
throw new XLSException( " 写入Excel文件出错! ");
}
}
/**
* 增加一行
*
* @param index
* 行号
*/
public void createRow( int index) {
this .row = this .sheet.createRow(index);
}
/**
* 设置单元格
*
* @param index
* 列号
* @param value
* 单元格填充值
*/
public void setCell( int index, String value) {
HSSFCell cell = this .row.createCell(index);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(value);
}
/**
* 设置单元格
*
* @param index
* 列号
* @param value
* 单元格填充值
*/
public void setCell( int index, Calendar value) {
HSSFCell cell = this .row.createCell(index);
cell.setCellValue(value.getTime());
HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT)); // 设置cell样式为定制的日期格式
cell.setCellStyle(cellStyle); // 设置该cell日期的显示格式
sheet.setColumnWidth(index, 5000);
}
public void setCell( int index, Date utilDate) {
Calendar c = new GregorianCalendar();
c.setTimeInMillis(utilDate.getTime());
setCell(index,c);
}
/**
* 设置单元格
*
* @param index
* 列号
* @param value
* 单元格填充值
*/
public void setCell( int index, int value) {
HSSFCell cell = this .row.createCell(index);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(value);
}
/**
* 设置单元格
*
* @param index
* 列号
* @param value
* 单元格填充值
*/
public void setCell( int index, double value) {
HSSFCell cell = this .row.createCell(index);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(value);
HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式
HSSFDataFormat format = workbook.createDataFormat();
cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); // 设置cell样式为定制的浮点数格式
cell.setCellStyle(cellStyle); // 设置该cell浮点数的显示格式
}
public String getXlsFileName() {
return xlsFileName;
}
public void setXlsFileName(String xlsFileName) {
this.xlsFileName = xlsFileName;
}
public HSSFWorkbook getWorkbook() {
return workbook;
}
public void setWorkbook(HSSFWorkbook workbook) {
this.workbook = workbook;
}
public HSSFSheet getSheet() {
return sheet;
}
public void setSheet(HSSFSheet sheet) {
this.sheet = sheet;
}
public HSSFRow getRow() {
return row;
}
public void setRow(HSSFRow row) {
this.row = row;
}
}
XLSException:
public class XLSException extends Exception{
public XLSException() {
}
public XLSException(String message) {
super(message);
}
}
XLSDemo:
public class XLSDemo {
/**
* 学习方法:
* 1:资料 先看懂 根据程序 测试数据
* 2:根据自己需要 做一些改动
* 3:再根据自己需要 做一些封装
* 4: 直接应用
*/
public static void main(String[] args) throws Exception {
Person p1 = new Person(1,"aaa",Date.valueOf("2012-12-12"),2000.0);
Person p2 = new Person(2,"bbb",Date.valueOf("2012-12-12"),2000.0);
Person p3 = new Person(3,"张三",Date.valueOf("2012-02-12"),2000.0);
List<Person> personList = new ArrayList<Person>();
personList.add(p1);
personList.add(p2);
personList.add(p3);
XLSExport xls = new XLSExport("D:/test2.xls");
//先搞一个表头
String[] tabHeadContent = new String[]{"编号","姓名","入职日期","工资"};
xls.createTable(true, personList, tabHeadContent);
//再生成文件
xls.exportXLS();
}
}
关于struts2输出excel表的更多相关文章
- LeetCode Excel Sheet Column Title (输出excel表的列名称)
题意:给一个数字n,输出excel表的列名称. 思路:其实观察可知道,是个26进制的标记而已.那就模拟一下,每次计算一位时就先左移1位,再进行计算. class Solution { public: ...
- arcgis api for javascript 学习(三) 调用发布地图信息,并将地图属性信息输出到Excel表中
吐血推荐:网上搜了很久关于webgis地图属性表输出到Excel表,并没能找到相关有价值的信息,在小白面前,这就是一脸懵x啊!网上要么是关于前端如何在页面上直接导出excel,和webgis半毛钱关系 ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...
- ASP.NET导出excel表方法汇总
asp.net里导出excel表方法汇总 1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...
- asp.net使用MVC4框架基于NPOI做导出数据到Excel表
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- struts2之防止表单重复提交
struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- POI框架实现创建Excel表、添加数据、读取数据
public class TestPOI2Excel {//创建2003版本Excel用此方法 @Test public void testWrite03Excel() throws Exceptio ...
- PHP将数据导出Excel表中(投机型)
1.简介 如何利用最简单粗糙暴力的方法将数据写入Excel文件中呢? 因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出. 在htm ...
- Excel表单的读取与处理 PHPExcel与Apache POI
近日,连续遇到需要对Excel表单内容进行读取的需求.一个是在php环境下,一个是在java环境下.这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法. d0710 : Fini ...
随机推荐
- vmware :Ubuntu 12.04添加新硬盘
http://blog.csdn.net/hanpengyu/article/details/7475645 一.VMware新增磁盘的设置步骤 (建议:在设置虚拟的时候,不要运行虚拟机的系统,不然添 ...
- ASP.NET Web API 全局权限和异常处理
转自:http://yangpei.appsp0t.com/post/aglzfnlhbmdwZWlyDAsSBUVudHJ5GLkXDA 正文之前先解决一个问题 Web Api XML序列化的问题 ...
- 【FusionCharts学习-2】第一个FusionCharts程序
获取资源 到官网:http://www.fusioncharts.com/download/ 获取FusionCharts文件: 目录结构: js目录下的文件: 创建项目 1. 项目名称:Fusion ...
- java实验二——输出一个指定整数的所有质因数
import java.util.Scanner; public class 实验二 { /** * @param args */ public static void main(String[] a ...
- Spring Batch批处理以及编程模型
1.批处理: 类似于SQL里面的批处理提交 2.场景: 业务定时进行批处理操作,但是批处理的编程模型是怎么的呢? 3.开源框架 Spring Batch 4.编程模型: reader-processo ...
- redis入门之jedis
jedis是redis官方首选的java客户端开发包 开源托管地址:https://github.com/xetorthio/jedis 下载地址,以及maven, 依赖参考: 下面来编写一段程序进行 ...
- 数据库之Mysql高级
简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表sc ...
- 2.纯 CSS 创作一个矩形旋转 loader 特效
原文地址:2.纯 CSS 创作一个矩形旋转 loader 特效 扩展后地址:https://scrimba.com/c/cNJVWUR 扩展地址:https://codepen.io/pen/ HT ...
- Kafka集群扩展以及重新分布分区
我们往已经部署好的Kafka集群里面添加机器是最正常不过的需求,而且添加起来非常地方便,我们需要做的事是从已经部署好的Kafka节点中复制相应的配置文件,然后把里面的broker id修改成全局唯一的 ...
- js 断点调试