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表的更多相关文章

  1. LeetCode Excel Sheet Column Title (输出excel表的列名称)

    题意:给一个数字n,输出excel表的列名称. 思路:其实观察可知道,是个26进制的标记而已.那就模拟一下,每次计算一位时就先左移1位,再进行计算. class Solution { public: ...

  2. arcgis api for javascript 学习(三) 调用发布地图信息,并将地图属性信息输出到Excel表中

    吐血推荐:网上搜了很久关于webgis地图属性表输出到Excel表,并没能找到相关有价值的信息,在小白面前,这就是一脸懵x啊!网上要么是关于前端如何在页面上直接导出excel,和webgis半毛钱关系 ...

  3. Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出

    从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...

  4. ASP.NET导出excel表方法汇总

    asp.net里导出excel表方法汇总  1.由dataset生成 public void CreateExcel(DataSet ds,string typeid,string FileName) ...

  5. asp.net使用MVC4框架基于NPOI做导出数据到Excel表

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...

  6. struts2之防止表单重复提交

    struts.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  7. POI框架实现创建Excel表、添加数据、读取数据

    public class TestPOI2Excel {//创建2003版本Excel用此方法 @Test public void testWrite03Excel() throws Exceptio ...

  8. PHP将数据导出Excel表中(投机型)

    1.简介 如何利用最简单粗糙暴力的方法将数据写入Excel文件中呢? 因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出. 在htm ...

  9. Excel表单的读取与处理 PHPExcel与Apache POI

    近日,连续遇到需要对Excel表单内容进行读取的需求.一个是在php环境下,一个是在java环境下.这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法. d0710 : Fini ...

随机推荐

  1. C# Request.Params与Request.QueryString 的区别

    1.Request.Params包含Request.QueryString,request.form.request.cookies和request.servervariables.这几种查找的时候会 ...

  2. 【shell】grep命令

    1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局 ...

  3. PHP 图片打水印

    <?php /*----------------------------------------------------------------------------------- *函数名称 ...

  4. ADO.NET EF 中的实体修改方法

    http://www.cnblogs.com/zfz15011/archive/2010/05/30/1747486.html 1.传统修改模式,看下列代码 using (NorthwindEntit ...

  5. Spring+hibernate+mysql事物不回滚的原因以及处理

    最近项目突然出了点问题,然后发现用Service层下面的一个类的一个方法里的事务居然没有回滚.然后自己写了一个测试方法经过了N次测试都是不回滚.以下是测试方法的一部分: @Transactional( ...

  6. 【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明

    摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFac ...

  7. java DateUtils

    package demoone; import java.sql.Timestamp; import java.text.ParseException; import java.text.Simple ...

  8. java反射例子

    一.field.setAccessible()方法: setAccessible方法是干什么用的呢让我们来看一段代码吧: public class User { private String name ...

  9. 峰Spring4学习(4)spring自动装配

    一.自动装配: Model类: People.java: package com.cy.entity; public class People { private int id; private St ...

  10. TMOD

    1. • tag/itemlist {{Syntax Error}} Debug info: Unexpected token else Waiting... Debug info: node D:/ ...