Excel生成及下载的JSF实现!

原创 2006年06月22日 13:42:00

package cn.ccb.elms.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
* <p>功能说明:用于文件下载的相关操作</p>
* @author gjg
* @version 1.0 2006-04-27
*/
public class DownloadUtil
{
  /**
   * 用二维数组的格式生成Excel文件
   * @param dataList String[][]
   */
  public static void genericExcel(String dataList[][])
  {
    String strFileName = "";
    try
    {
      // 生成Excel文件并保存在服务器上
      SSConfig ssc = new SSConfig();
      String strZFileName = "Query_" + ssc.getSysTimeStamp(); // 主文件名
      strFileName = strZFileName + ".xls"; // 文件全名
      FileOutputStream fileOut = new FileOutputStream(strFileName);
      HSSFWorkbook wb = new HSSFWorkbook();
      HSSFCellStyle cs = wb.createCellStyle(); // 格式对象
      HSSFFont fCol = wb.createFont(); // 字体对象,表头
      fCol.setFontHeightInPoints( (short) 10);
      fCol.setBoldweight(fCol.BOLDWEIGHT_BOLD);
      // 工作表
      HSSFSheet sheet = wb.createSheet(0 + "");
      wb.setSheetName(0, strZFileName, (short) 1);
      // 第一行,放表头
      HSSFRow row = null;

      int nRowNum = 0;
      for (int nh = 0; nh < dataList.length; nh++)
      {
        row = sheet.createRow(nRowNum); // 创建行
        for (int nk = 0; nk < dataList[0].length; nk++)
        {
          HSSFCell cell = row.createCell( (short) (nk));
          cell.setEncoding(HSSFCell.ENCODING_UTF_16);
          cell.setCellValue(dataList[nh][nk]); // 写入单元格
          //将表头设为粗体居中
          if (nRowNum == 0)
          {
            cs.setFont(fCol);
            cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            cell.setCellStyle(cs);
          }
        }
        nRowNum++;
      }
      wb.write(fileOut);
      fileOut.close();

    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    //根据提供的文件名下载文件
    downloadFile(strFileName);
  }

  /**
   * 用List格式生成Excel文件
   * @deprecated
   * @param ColName_zh List
   * @param data List
   */
  public static void genericExcel2(List ColName_zh, List data)
  {
    String strFileName = "";
    try
    {
      if (ColName_zh == null || data == null)
      {
        throw new Exception("表头列数或数据列数为空!");
      }

      // 生成Excel文件并保存在服务器上
      SSConfig ssc = new SSConfig();
      String strZFileName = "Query_" + ssc.getSysTimeStamp(); // 主文件名
      strFileName = strZFileName + ".xls"; // 文件全名
      FileOutputStream fileOut = new FileOutputStream(strFileName);
      HSSFWorkbook wb = new HSSFWorkbook();
      HSSFCellStyle cs = wb.createCellStyle(); // 格式对象
      HSSFFont fCol = wb.createFont(); // 字体对象,表头
      fCol.setFontHeightInPoints( (short) 10);
      fCol.setBoldweight(fCol.BOLDWEIGHT_BOLD);
      // 工作表
      HSSFSheet sheet = wb.createSheet(0 + "");
      wb.setSheetName(0, strZFileName, (short) 1);
      // 第一行,放表头
      HSSFRow row = null;
      row = sheet.createRow( (short) 0);
      int ny = 0;
      for (Iterator iter = ColName_zh.iterator(); iter.hasNext(); )
      {
        HSSFCell cell = row.createCell( (short) ny);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cs.setFont(fCol);
        cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cell.setCellStyle(cs);
        cell.setCellValue(iter.next() + "");
        ny++;
      }
      // x代表数据的起始行数
      // y代表数据从第哪一列开始填充
      int nx = 1; // 数据从第一行开始
      for (Iterator itert = data.iterator(); itert.hasNext(); )
      {
        ny = 0;
        row = sheet.createRow( (short) nx);
        ArrayList al2 = (ArrayList) itert.next();
        for (Iterator iter2 = al2.iterator(); iter2.hasNext(); )
        {
          HSSFCell cell = row.createCell( (short) ny);
          cell.setEncoding(HSSFCell.ENCODING_UTF_16);
          // cs.setFont(fCol);
          cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          // cell.setCellStyle(cs);
          cell.setCellValue(iter2.next() + "");
          ny++;
        }
        nx++;
      }
      wb.write(fileOut);
      fileOut.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    //根据提供的文件名下载文件
    downloadFile(strFileName);
  }

  /**
   * <p>功能说明:根据提供的文件名下载文件</p>
   * @param strfileName String
   * @return void
   */
  private static void downloadFile(String strfileName)
  {
    try
    {
      File exportFile = new File(strfileName);
      HttpServletResponse httpServletResponse = (HttpServletResponse)
          FacesContext.getCurrentInstance().
          getExternalContext().getResponse();
      ServletOutputStream servletOutputStream = httpServletResponse.
          getOutputStream();
      httpServletResponse.setHeader("Content-disposition",
                                    "attachment; filename=" + strfileName);
      httpServletResponse.setContentLength( (int) exportFile.length());
      httpServletResponse.setContentType("application/x-download");
      byte[] b = new byte[1024];
      int i = 0;
      FileInputStream fis = new java.io.FileInputStream(exportFile);
      while ( (i = fis.read(b)) > 0)
      {
        servletOutputStream.write(b, 0, i);
      }
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    FacesContext.getCurrentInstance().responseComplete();
  }

  public static void main(String[] args)
  {
    //genericExcel()用法
    String s[][] = new String[][]
        {
        {
        "列1", "列2", "列3", "列4"},
        {
        "A", "22", "33", "44"}
    };
    genericExcel(s);

    //genericExcel2()用法
    //al代表表头
    ArrayList al = new ArrayList();
    al.add("a");
    al.add("b");
    al.add("c");
    // al2代表多行数据
    ArrayList al2 = new ArrayList();
    // al3代表一行数据
    ArrayList al3 = new ArrayList();
    al3.add("1");
    al3.add("2");
    al3.add("3");
    al2.add(al3);
    al3 = new ArrayList(); // 此处必须new一个新的ArrayList对象
    al3.add("11");
    al3.add("22");
    al3.add("33");
    al2.add(al3);
    genericExcel2(al, al2);
  }

}

JSF文件下载的不同实现

本文列举了在JSF应用中实现文件下载的几种不同方法。 方法 1- 使用Servlet 这种方法使用一个servlet来实现文件下载, 在JSF页面上则使用commandLink或outputL...
  • huyouheng
  • huyouheng
  • 2012年03月08日 02:16
  • 1747

实例-用JSF实现文件下载

背景:环境:Windows pro 2000 + sp4; Tomcat 5.0.30, Myfaces 1.1.0(一定要用这个版本,否则会有Servlet response相关的错误,虽然文件还是...
  • leeshaoqun
  • leeshaoqun
  • 2006年02月12日 21:38
  • 2028

实例-用JSF实现文件下载

Backing bean设计及代码: 注意这是个Action listener方法,没有返回值,并且有javax.faces.event.ActionEvent参数    public voi...
  • wushuang5566110
  • wushuang5566110
  • 2011年12月20日 15:50
  • 847

【JSF小记】JSF实现简单的文件下载

jsf实现文件下载和servlet实现文件下载非常类似,主要实现方式是向response流中写人response头和文件数据。下面是简单的实现方式,支持多版本浏览器,但不支持断点下载。       ...
  • zfpigpig
  • zfpigpig
  • 2012年09月13日 19:40
  • 1543

JSF框架实现各种类型文件的上传下载

JSF框架实现各种类型文件的上传下载!使用IDE:java studio creator2 文件上传组件,IDE已经提供了,可直接使用,中文出现乱码时,将JSP页面的charset设置成GBK即可,e...
  • kepeizong
  • kepeizong
  • 2006年05月16日 10:53
  • 1458

JSF文件上传功能

           最近项目需要用jsf1.2实现文件上传功能,我没有采用myfaces,而是用Apache MyFaces Trinidad 这个实现的文件上传,实现方法和myfaces是一样的。...
  • lw223
  • lw223
  • 2007年10月21日 22:24
  • 2872

jxl实现Excel文件的生成与下载

Servlet.java代码: public void toExcel(HttpServletObject obj)         throws ServletException, IOExcept...
  • July_Star
  • July_Star
  • 2016年12月04日 16:19
  • 764

奉送我的JSF书稿中的一个实例:JSF实现的自选语言界面

版权声明:本文可以自由转载,转载时请务必标明作者信息及本声明       作者:++yong作者的Blog:http://blog.csdn.net/qjyong问题描述:实现一个带自选语言栏的用户登...
  • qjyong
  • qjyong
  • 2007年12月15日 16:44
  • 3064

Jxl在线实时生成Excel文件流供下载

思路:将项目中需要下载xls文件的部分在一个action中实现,设定好生成的excel的格式,然后从dao层获取到数据写入到book中,然后将表输入到输入流供客户端下载。 注意配好配置文件里的bea...
  • baby_soga
  • baby_soga
  • 2014年03月24日 15:43
  • 1382

在线实时生成Excel文件流供下载 (SSH)

转载自:http://www.blogjava.net/qnjian/archive/2010/11/29/25999.html?opt=admin (与Java相伴的日子)   我做过的一...
  • kexinmei
  • kexinmei
  • 2012年01月12日 19:54
  • 1757
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Excel生成及下载的JSF实现!
举报原因:
原因补充:

(最多只允许输入30个字)