一個jsp網頁,調用excel文件,把他的內容,顯示在網頁裡面
怎麼辦啊,各位同仁.絕對散分.謝謝

解决方案 »

  1.   

    1.首先去http://www.andykhan.com/jexcelapi/index.html下载最新的JExcelApi,把jxl.jar置于你的classpath中2.写一个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)); 
      } } 3.写一个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的编译后源码是这样的: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);         out = pageContext.getOut(); 
            JspWriter _originalOut = out;         javax.servlet.http.HttpSession session = request.getSession(true);         try { // error page try block             out.print("\r\n"); 
                //[ /test_excel.jsp; Line: 2] 
                response.reset(); //[ /test_excel.jsp; Line: 3] 
                response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp; Line: 4] 
                Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp; Line: 5] 
            } catch (Throwable __ee) { 
                while (out != null && out != _originalOut) out = pageContext.popBody(); 
                ((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee); 
            } 
            //before final close brace... 
        } 
    大家可以看到在response.reset(); 之后,Test.writeExcel(response.getOutputStream());之前正确的设置了response的输出内容。所以输出就正常了。
    最后,希望这篇文章能对你有所启发,如有错误之处,敬请批评指正!
      

  2.   

    要导出数据到excel文件有一个简单的方法:
    先建一个excel文件,在其中设定你的格式,比如:
    姓名   学号
    张三   123
    然后另存为网页格式.html,最后把生成文件的后缀改为jsp,在jsp文件中从数据库中读取你的数据,并将读出来的数据,放在“张三”,“123”的地方;并且在jsp文件的头部加上:
    <%@page contentType="application/vnd.ms-excel;charset=GBK" %>
    呵呵,10分也叫散分?