KAY

人之所以能,是相信能。
posts - 6, comments - 5, trackbacks - 0, articles - 11
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

用jxl把JSP中的数据导入到EXECL中

Posted on 2007-05-25 18:52 KAY 阅读(1236) 评论(0)  编辑  收藏
首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为protected类型。示例代码片段如下:  
   
   
  import   java.io.*;  
  import   jxl.*;  
  import   jxl.write.*;  
  …   …   …   …  
  try  
  {  
  //构建Workbook对象,   只读Workbook对象  
  //Method   1:创建可写入的Excel工作薄  
          jxl.write.WritableWorkbook   wwb   =   Workbook.createWorkbook(new   File(targetfile));  
   
  //Method   2:将WritableWorkbook直接写入到输出流  
  /*  
          OutputStream   os   =   new   FileOutputStream(targetfile);  
          jxl.write.WritableWorkbook   wwb   =   Workbook.createWorkbook(os);  
  */  
  }  
  catch   (Exception   e)  
  {  
  e.printStackTrace();  
  }  
   
     
   
  API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果HTTP头设置正确的话,浏览器自动调用客户端的Excel应用程序,来显示动态生成的Excel电子表格。  
   
  接下来就是要创建工作表,创建工作表的方法与创建工作薄的方法几乎一样,同样是通过工厂模式方法获得相应的对象,该方法需要两个参数,一个是工作表的名称,另一个是工作表在工作薄中的位置,参考下面的代码片段:  
   
   
  //创建Excel工作表  
  jxl.write.WritableSheet   ws   =   wwb.createSheet("Test   Sheet   1",   0);  
   
     
   
  "这锅也支好了,材料也准备齐全了,可以开始下锅了!",现在要做的只是实例化API所提供的Excel基本数据类型,并将它们添加到工作表中就可以了,参考下面的代码片段:  
   
   
  //1.添加Label对象  
  jxl.write.Label   labelC   =   new   jxl.write.Label(0,   0,   "This   is   a   Label   cell");  
  ws.addCell(labelC);  
   
  //添加带有字型Formatting的对象  
  jxl.write.WritableFont   wf   =   new   jxl.write.WritableFont(WritableFont.TIMES,   18,   WritableFont.BOLD,   true);  
  jxl.write.WritableCellFormat   wcfF   =   new   jxl.write.WritableCellFormat(wf);  
  jxl.write.Label   labelCF   =   new   jxl.write.Label(1,   0,   "This   is   a   Label   Cell",   wcfF);  
  ws.addCell(labelCF);  
   
  //添加带有字体颜色Formatting的对象  
  jxl.write.WritableFont   wfc   =   new   jxl.write.WritableFont(WritableFont.ARIAL,   10,   WritableFont.NO_BOLD,   false,  
  UnderlineStyle.NO_UNDERLINE,   jxl.format.Colour.RED);  
  jxl.write.WritableCellFormat   wcfFC   =   new   jxl.write.WritableCellFormat(wfc);  
  jxl.write.Label   labelCFC   =   new   jxl.write.Label(1,   0,   "This   is   a   Label   Cell",   wcfFC);  
  ws.addCell(labelCF);  
   
  //2.添加Number对象  
  jxl.write.Number   labelN   =   new   jxl.write.Number(0,   1,   3.1415926);  
  ws.addCell(labelN);  
   
  //添加带有formatting的Number对象  
  jxl.write.NumberFormat   nf   =   new   jxl.write.NumberFormat("#.##");  
  jxl.write.WritableCellFormat   wcfN   =   new   jxl.write.WritableCellFormat(nf);  
  jxl.write.Number   labelNF   =   new   jxl.write.Number(1,   1,   3.1415926,   wcfN);  
  ws.addCell(labelNF);  
   
  //3.添加Boolean对象  
  jxl.write.Boolean   labelB   =   new   jxl.write.Boolean(0,   2,   false);  
  ws.addCell(labelB);  
   
  //4.添加DateTime对象  
  jxl.write.DateTime   labelDT   =   new   jxl.write.DateTime(0,   3,   new   java.util.Date());  
  ws.addCell(labelDT);  
   
  //添加带有formatting的DateFormat对象  
  jxl.write.DateFormat   df   =   new   jxl.write.DateFormat("dd   MM   yyyy   hh:mm:ss");  
  jxl.write.WritableCellFormat   wcfDF   =   new   jxl.write.WritableCellFormat(df);  
  jxl.write.DateTime   labelDTF   =   new   jxl.write.DateTime(1,   3,   new   java.util.Date(),   wcfDF);  
  ws.addCell(labelDTF);  
   
     
   
  这里有两点大家要引起大家的注意。第一点,在构造单元格时,单元格在工作表中的位置就已经确定了。一旦创建后,单元格的位置是不能够变更的,尽管单元格的内容是可以改变的。第二点,单元格的定位是按照下面这样的规律(column,   row),而且下标都是从0开始,例如,A1被存储在(0,   0),B1被存储在(1,   0)。  
   
  最后,不要忘记关闭打开的Excel工作薄对象,以释放占用的内存,参见下面的代码片段:  
   
   
  //写入Exel工作表  
  wwb.write();  
   
  //关闭Excel工作薄对象  
  wwb.close();  
   
     
 

但是,如何根据表格的变化而到入execl呢?就象jpivot那样的表格是不固定的  
  ,如何才能按照页面的样式导入呢?
表格宽度也可以自定义:  
  如  
  sheet.setColumnView(0,6);    
  sheet.setColumnView(1,12);  
  sheet.setColumnView(2,20);  
  sheet.setColumnView(3,11);  

只有注册用户登录后才能发表评论。


网站导航:
 
QQ:
254653340
MSN:
xf_chouyang@hotmail.com