CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

怎么把JSP页面上的TABLE输出到EXCEL表中?

楼主zh_mi(AMI)2006-03-20 16:36:50 在 Java / Web 开发 提问

如题,方法越简单越好 问题点数:100、回复次数:15Top

1 楼ibiswang(神鸟)回复于 2006-03-20 16:50:12 得分 10

response.setContentType("application/vnd.ms-excel");  
   
   
  out.println("<table><tr><td>....</td>....</tr></table>");  
   
  即可.Top

2 楼sugar900()回复于 2006-03-20 23:29:28 得分 0

简单的话,如上就行Top

3 楼wuyg(平平)回复于 2006-03-21 00:42:00 得分 10

response.setContentType("application/vnd.ms-excel");  
  out.println("aaa;bbb;ccc");Top

4 楼mgan(ROOT→〖将来是我〗)回复于 2006-03-21 08:33:52 得分 0

楼上正解。。。Top

5 楼xiaopeipei2004(小裴)回复于 2006-03-21 08:48:46 得分 0

upTop

6 楼wmzsl(王明哲)回复于 2006-03-21 08:52:39 得分 50

首先去http://www.andykhan.com/jexcelapi/index.html下载最新的JExcelApi,把jxl.jar置于你的classpath中。  
   
    写一个javaBean,利用JExcelApi来动态生成excel文档,我这里写一个最简单的,示意性的。复杂的你可能还要查询数据库什么的。  
   
  ///////////////////////////Test.java///////////////////////////////////////////  
  package   com.jagie.test;  
  import   java.io.*;  
  import   jxl.*;  
  import   jxl.write.*;  
  import   jxl.format.*;  
  import   java.util.*;  
  import   java.awt.Color;  
   
  public   class   Test{  
   public   static   void   writeExcel(OutputStream   os)   throws   Exception   {  
    jxl.write.WritableWorkbook   wwb   =   Workbook.createWorkbook(os);  
    jxl.write.WritableSheet   ws   =   wwb.createSheet("TestSheet1",   0);  
    jxl.write.Label   labelC   =   new   jxl.write.Label(0,   0,   "我爱中国");  
    ws.addCell(labelC);  
    jxl.write.WritableFont   wfc   =   new   jxl.write.WritableFont(WritableFont.ARIAL,20,   WritableFont.BOLD,   false,  
    UnderlineStyle.NO_UNDERLINE,   jxl.format.Colour.GREEN);  
    jxl.write.WritableCellFormat   wcfFC   =   new   jxl.write.WritableCellFormat(wfc);  
    wcfFC.setBackground(jxl.format.Colour.RED);  
    labelC   =   new   jxl.write.Label(6,   0,   "中国爱我",wcfFC);  
    ws.addCell(labelC);  
    //写入Exel工作表  
    wwb.write();  
    //关闭Excel工作薄对象  
    wwb.close();  
   }  
   
   //最好写一个这样的main方法来测试一下你的这个class是否写好了。  
   public   static   void   main(String[]   args)throws   Exception{  
    File   f=new   File("kk.xls");  
    f.createNewFile();  
    writeExcel(new   FileOutputStream(f));  
   }  
  }    
   
    写一个jsp,来利用Test这个javabean输出excel文档。  
   
  ///////////////////////////test_excel.jsp//////////////////////////  
   
  <%@page   import="com.jagie.test.Test"   %>  
  <%  
   response.reset();  
   response.setContentType("application/vnd.ms-excel");  
   Test.writeExcel(response.getOutputStream());  
  %>    
   
    这样就大功告成了,你用ie访问test_excel.jsp就能在ie里面打开动态生成的excel文档了。一点乱码也没有。  
   
    也许有人会问:response.reset();可不可以不要这一句,我的建议是一定要写,除非你能保证response的buffer里面没有别的东西。  
   
    还有人也许会问:我在jsp开头加上<%@page   contentType="application/vnd.ms-excel;charset=GBK"   %>这一句,去掉response.setContentType("application/vnd.ms-excel");行不行?回答这个问题很简单,就是查看jsp服务器编译jsp后生成的java代码,如果改成这样,我的welogic7编译test_excel.jsp后生成的java文件的示意性代码是这样的:  
   
  public   void   _jspService(javax.servlet.http.HttpServletRequest   request,    
  javax.servlet.http.HttpServletResponse   response)   throws   java.io.IOException,    
  javax.servlet.ServletException   {    
   
   //   declare   and   set   well-known   variables:  
   javax.servlet.ServletConfig   config   =   getServletConfig();  
   javax.servlet.ServletContext   application   =   config.getServletContext();  
   javax.servlet.jsp.tagext.Tag   _activeTag   =   null;  
   //   variables   for   Tag   extension   protocol  
   
   Object   page   =   this;  
   javax.servlet.jsp.JspWriter   out;  
   javax.servlet.jsp.PageContext   pageContext   =  
   javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,    
   request,   response,   null,   true,   8192,   true);  
   
   response.setHeader("Content-Type",   "application/vnd.ms-excel;   charset=GBK");  
   out   =   pageContext.getOut();  
   JspWriter   _originalOut   =   out;  
   
   javax.servlet.http.HttpSession   session   =   request.getSession(true);  
   
   try   {   //   error   page   try   block  
    response.setContentType("application/vnd.ms-excel;charset=GBK");  
    out.print("\r\n\r\n\r\n\r\n");  
    out.print("\r\n");  
    //[   /test_excel.jsp;   Line:   6]  
    response.reset();   //[   /test_excel.jsp;   Line:   7]  
    //response.setContentType("application/vnd.ms-excel");    
    //[   /test_excel.jsp;   Line:   8]  
    Test.writeExcel(response.getOutputStream());   //[   /test_excel.jsp;   Line:   9]  
    }   catch   (Throwable   __ee)   {  
     while   (out   !=   null   &&   out   !=   _originalOut)   out   =   pageContext.popBody();  
    ((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);  
   }  
   
   //before   final   close   brace...  
  }    
   
    很明显,屏蔽response.setContentType("application/vnd.ms-excel");后,在Test.writeExcel(response.getOutputStream());之前,response.reset();   之后没有设置response   contenttype的正确类型,当然输出为乱码了。而正确输出excel的jsp的?/span>    
  Top

7 楼crazy_he(天煞孤星)回复于 2006-03-21 10:00:13 得分 20

<%  
  response.setContentType("APPLICATION/OCTET-STREAM");    
  response.setHeader("Content-Disposition",   "attachment;   filename="+   (new   SimpleDateFormat("yyyyMMddHHmmss")).format(new   java.util.Date())   +".xls   ");    
  %>  
  <html   xmlns:o="urn:schemas-microsoft-com:office:office"   xmlns:x="urn:schemas-microsoft-com:office:excel"   xmlns="http://www.w3.org/TR/REC-html40">  
  Top

8 楼crazy_he(天煞孤星)回复于 2006-03-21 10:01:16 得分 0

前提是客户端安装了Excel,否则一切都免谈。除非用wmzsl(王明哲)的方法Top

9 楼fengzheng12345(风筝)回复于 2006-03-21 11:47:55 得分 0

只要加上这个就行  
  <%@   page   contentType="Application/msexcel;   charset=gb2312"   %>  
  <%  
  response.setHeader("Content-disposition","inline;   filename=result.xls"   );  
  %>Top

10 楼lzmhehe(小飞飞)回复于 2006-03-21 13:05:25 得分 0

markTop

11 楼rj058005()回复于 2006-03-21 17:17:15 得分 0

up   upTop

12 楼xiangbo520(充栋汗牛)回复于 2006-03-21 23:48:37 得分 0

建议使用APACHE的POITop

13 楼datalover(白发始立发奋志)回复于 2006-03-22 08:59:07 得分 0

MARKTop

14 楼mysohu( 21世纪最重要的就是我!:))回复于 2006-03-22 09:02:32 得分 10

简单的话就是这个方法  
  response.setHeader("Content-disposition","inline;   filename=result.xls"   );  
  Top

15 楼ni966445()回复于 2006-06-18 21:11:44 得分 0

受益匪浅Top

相关问题

  • jsp输出Excel问题?
  • jsp数据输出到EXCEL文件?
  • Excel输出
  • 我输出EXCEL,用application/vnd.ms-excel把整个TABLE输出到EXCEL中,但却有时候会出现乱码,为什么?
  • 我输出EXCEL,用application/vnd.ms-excel把整个TABLE输出到EXCEL中,但却有时候会出现乱码,为什么?
  • jsp excel?
  • jsp中线程输出。
  • jsp怎么输出中文?
  • jsp定义输出格式
  • 输出excel的问题!

关键词

  • excel
  • jxl
  • jexcelapi
  • 简单
  • 方法
  • write
  • import
  • response
  • test

得分解答快速导航

  • 帖主:zh_mi
  • ibiswang
  • wuyg
  • wmzsl
  • crazy_he
  • mysohu

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo