Java读取Excel文件的几点考虑

来源:互联网 发布:日本地震知乎 编辑:程序博客网 时间:2024/04/27 19:58

   最近在做有关Java读取Excel的项目,最终的目的是希望做一个读取Excel文件导入到数据库正式表的通用组件。通用表现在不管是什么业务场景,不管Excel文件内容如何,都可以读取出来,不仅要页面显示,还要导入到数据库正式表中,同时可以为用户提供导入结果成功与否的信息。

   而在读取Excel显示的部分,考虑了三种方法:

1、利用JSP的页面contentType属性实现:

tomcat/conf/web.xml下加:
<mime-mapping>
<extension>xls</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
需要导出的文件头上加:
<%@ page contentType="application/vnd.ms-excel" %>
类似于下面的代码show.jsp  
   
  <%  
  filename   =   request.getParameter("filename");  
  response.sendRedirect("../../XXXX/"   +   filename   +   ".xls");   //   "../../XXXX/"     文件路径  
  %>

2、利用jdk自带的Microsoft ODBC驱动,直接读取Excel文件

String tx="";
  try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            String url = "jdbc:odbc:driver={Microsoft Excel Driver (*.xls)};DBQ=d://javaTest//test.xls";

            Connection conn = DriverManager.getConnection(url);

            Statement stmt = conn.createStatement();
           
            ResultSet rs = stmt.executeQuery("select * from [Sheet1$]");

            //一次显示一行,rs记录集的总记录数即为文件的行数,默认第一行作为Title是不读取的
            while(rs.next()){
                    tx +=rs.getString(1)+"/n/n";
                    tx +=rs.getString(2)+"/n/n";
                    tx +=rs.getString(3)+"/n/n";
            }
           
            System.out.println(tx);
           
    } catch (Exception e) {
            e.printStackTrace();
    }

3、利用jxl.jar这一第三方组件,逐行读取文件保存到内存中,然后再显示。拟采用二维数组链表来存放读取的数据,一个二维数组存放一行数据,链表的元素个数即为文件总行数。这一方法可能比较占内存,有待进一步测试验证。

 显示完成之后,如果允许用户在页面对数据进行修改,修改后的值如何保存起来也是要考虑的问题。欢迎大家提出更好的建议!呵呵~~~~~~~~~~~~~