jsp的Excel报表的简单使用

 

最开始用iText生成pdf报表,可是管理流程竟然要求生成excel然后再通过人工审核,所以不得不借用组件去生成Excel文档,一开发现的就是apache的POI.因为我原来用的制作报表的工具是iReport  +  Jasper ,好像它支持的也是POI组件。
        我找了一些资料,大部分说得都是直接生成Excel文档,下载到本机操作,可是现在想把Excel在网页页面显示,因为这种过程比较直观,然后根据需求,看是否需要下载到本机。
        生成Excel比较简单,非常类似于网页表格的生成。
       Excel的三大元素:
       
1 .文档本体 HSSFSheet
       
2 .文档行   HSSFRow
       
3 .文档单元格  HSSFCell
        不过操作这一切之前,你要先建立一个工程。
       操作流程就是: 建一个工程,在此工程下建一个文档,增加行,增加单元格 我想无论多么复杂,应该大体过程都如此。
       下面这一段是一个简单构建过程:

        HSSFWorkbook wb 
=   new  HSSFWorkbook(); // 建立一工程    
        HSSFSheet sheet  =  wb.createSheet( " mySheet " ); // 生成一个文档实体(参数可选)    
      HSSFRow row  =  sheet.createRow(( short ) 0 ); // 增加一行,行号必须为短整型    
      HSSFCell cell  =  row.createCell(( short ) 0 ); // 增加单元格,可一行多格   
      cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);  // 中文非要加上这一句,要不乱码    
      cell.setCellValue( 1 ); // 置值     //  你也可以一行做完全部的事    
      row.createCell(( short ) 1 ).setCellValue( 1.2 );    
      row.createCell((
short ) 2 ).setCellValue( " This is a string " );    
      row.createCell((
short ) 3 ).setCellValue( true );     //  输出到文档 这一部也是要我们做的,就把数据流倒到jsp页    
      FileOutputStream fileOut  =   new  FileOutputStream( " workbook.xls " );    
      wb.write(fileOut);    
      fileOut.close();
     这中表格很朴素,机会没有用到诸如字体设置,样式风格,甚至很严重的中文问题也没有考虑 ,不过这是万里长征第一步,也是增强自信心的第一步。那么接下来我们一步一步打造一个完整的Excel报表.

   单元格样式

 

        HSSFFont cf 
=  workbook.createFont();  // 基本字体                                       
      HSSFCellStyle cs  = workbook.createCellStyle();  // 单元格样式        
      cf.setFontHeightInPoints(( short ) 12 );  // 字体大小         
      cf.setColor(HSSFFont.COLOR_RED);  // 字体颜色 注意使用HSSFont下的颜色常量        
      cf.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  // 字体粗细        
      cs.setFont(cf); // 设置字体样式        
      cs.setAlignment(HSSFCellStyle.ALIGN_RIGHT);  // 对齐方式

这里只简单介绍,接下来,看一下如何把这些东西搬到jsp页面。
        以下是写的一个方法,实际应该是有数据库链接的,出于简单考虑,直接写些数据就了事。 

    
public  ByteArrayOutputStream resultSetToExcel(ByteArrayOutputStream buffer)  {
        HSSFWorkbook workbook 
=new HSSFWorkbook();
        HSSFSheet sheet 
=workbook.createSheet();
        HSSFRow aRow 
=null;
        HSSFCell  aCell 
=null;
        HSSFFont headFont 
=workbook.createFont();
        HSSFCellStyle headStyle
=workbook.createCellStyle();        
headFont.setFontHeightInPoints((
short)12);
        headFont.setColor(HSSFFont.COLOR_RED);
        headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        headFont.setFontName(
"宋体");
        headStyle.setFont(headFont);
        
short currRowNum =  0;
        
try {
            
int columnCount = 10            row =sheet.createRow(currRowNum++); 
           
for (int i=0;  i < columnCount; i++{
                aCell 
=aRow.createCell((short)i);
                aCell.setEncoding(HSSFWorkbook.ENCODING_UTF_16);
                aCell.setCellValue(
"字段" + i); 
               aCell.setCellStyle(headStyle);
            }

            
for (int i=0; i < 10; i++{
               aRow 
= sheet.createRow(currRowNum++);
               
for(int j = 0 ; j  <  columnCount ; j ++){
                 aCell 
= aRow.createCell( (short) j);
                 aCell.setCellValue(j); 
              }

            }

            workbook.write(buffer);
        }

        
catch(Exception ex1){
          ex1.printStackTrace();
        }

         
return buffer;
    }


jsp页面的代码如下: 其中myExcel 是我写的一个用上面方法组成的一个类


<% @ page  import   = " java.io.* " %><% @ page  import   = " javax.servlet.* " %><% @ page  import   = " org.apache.poi.hssf.util.* " %><%          ByteArrayOutputStream buffer  =   new  ByteArrayOutputStream();
       com.print.demo.MyExcel myExcel 
=   new  com.print.demo.MyExcel();
        buffer  
=  myExcel.resultSetToExcel(buffer);
        
byte [] bytes  =  buffer.toByteArray();

        response.reset();
// 以前一直没写,出现乱码.
        response.setContentType( " application/vnd.ms-excel " ); //         response.setContentLength(bytes.length);
        DataOutput output  =   new  DataOutputStream( response.getOutputStream() );
        
for int  i  =   0 ; i  <  bytes.length; i ++  )  { output.writeByte( bytes[i] ); } %>  

大体如此。 具体细节,自己以后慢慢调试。

简单的使用是应该没问题的。




Trackback: http:
// tb.blog.csdn.net/TrackBack.aspx?PostId=559927

转载于:https://www.cnblogs.com/ctfzh/archive/2007/12/26/1015716.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值