-3

MySQLデータベースからExcelファイルにデータを書き込むための次のコードがあります。

そのために、org.apache.poi パッケージをダウンロードし、それを Tomcat の ROOT ディレクトリの classes フォルダーに配置しました。

<%@ page import="java.io.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.Hashtable"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ page import="java.lang.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.ResultSetMetaData"%>
<jsp:directive.import></jsp:directive.import>
<jsp:directive.import></jsp:directive.import>
<jsp:directive.import></jsp:directive.import>
<jsp:directive.import></jsp:directive.import>
<jsp:directive.import></jsp:directive.import>
<%
    try{
    String filename="D:/data.xls" ;
    HSSFWorkbook hwb=new HSSFWorkbook();
    HSSFSheet sheet =  hwb.createSheet("new sheet");

    HSSFRow rowhead=   sheet.createRow((short)0);
    rowhead.createCell((short) 0).setCellValue("BID");
    rowhead.createCell((short) 1).setCellValue("BELONGING_TYPE");
    rowhead.createCell((short) 2).setCellValue("BELONGING_TEXT");

    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yatin", "root", "root");
    Statement st=con.createStatement();
    ResultSet rs=st.executeQuery("Select * from tm_belonging");
    int i=1;
    while(rs.next()){
    HSSFRow row=   sheet.createRow((short)i);
    row.createCell((short) 0).setCellValue(rs.getInt("BID"));
    row.createCell((short) 1).setCellValue(rs.getString("BELONGING_TYPE"));
    row.createCell((short) 2).setCellValue(rs.getString("BELONGING_TEXT"));
    i++;
    }
    FileOutputStream fileOut =  new FileOutputStream(filename);
    hwb.write(fileOut);
    fileOut.close();
    out.println("Your excel file has been generated!");

    } catch ( Exception ex ) {
        System.out.println(ex);
        ex.printStackTrace();

    }
%>

しかし、次のエラーが表示されます

何が悪いのか教えて

タイプ例外報告メッセージ:

サーバーで内部エラー () が発生したため、この要求を実行できませんでした。

例外:

org.apache.jasper.JasperException: /ExcelReport.jsp(11,4) Invalid directive
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:472)
    org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1748)
    org.apache.jasper.compiler.Parser.parse(Parser.java:127)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
    org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:120)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:180)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
4

1 に答える 1

0

私が検出できる最初の失敗は、ファイル名が「D:\data.xls」でなければならないことです。Windows 環境のパスにはバックスラッシュを使用する必要があります (Linux では D:... を使用しないでください)。

"D:/data.xls" のようなファイル名を (正常に動作している) コードに入れると、発生した例外レポートに同じ説明が表示されます。これが解決策になるのでしょうか?

于 2012-08-04T16:18:25.487 に答える