使用Java讀取Excel文件內(nèi)容

          可以用Java讀取Microsoft Excel文件。微軟提供了一個Excel的ODBC驅(qū)動程序,因此我們就可以使用JDBC和Sun的JDBC-ODBC驅(qū)動來讀取Excel文件了。

          ??如果你有個Excel文件,名為Book1.xls(譯者注:由于原文的例子我沒有下載下來,所以我用了自己的例子),并且,該文件中有一個工作表(sheet)名為Sheet1

          ??

          微軟的ODBC驅(qū)動程序把工作表中的第一行作為列名(譯者注:即字段名),工作表名作為數(shù)據(jù)庫表名。

          ??要通過JDBC訪問工作表,我們還必須創(chuàng)建一個新的ODBC數(shù)據(jù)源,在Windows 2000系統(tǒng)上創(chuàng)建數(shù)據(jù)源的過程如下:


          進入“控制面板” --> “管理工具” --> “數(shù)據(jù)源(ODBC)”,(譯者注:打開后選擇系統(tǒng)DSN),點擊添加,在彈出窗口中選擇“Driver do Microsoft Excel(*.xls)”




          然后在數(shù)據(jù)源名處輸入你一個名字Book1(譯者注:相當于數(shù)據(jù)庫名),然后點擊“選擇工作簿”,然后找到并選取你的Excel文件


          點擊確定后,系統(tǒng)數(shù)據(jù)源列表中會出現(xiàn)你設(shè)置的數(shù)據(jù)源名稱,
          ??



          ??現(xiàn)在數(shù)據(jù)表已經(jīng)在數(shù)據(jù)源列表里了(譯者注:點擊確定完成配置)。

          ??(譯者注:我的例子中)現(xiàn)在如果我們想挑出test1列中的所有“測試”值,那就需要用以下的SQL查詢:

          ??SELECT test1 FROM [Sheet1$] WHERE test1='測試'

          ??要注意的是工作表名后面跟了一個“$”符號,這個符號是不可缺少的。為什么?因為他的前后有方括號,因為“$”是SQL語句中的保留字。Life is never easy(譯者注:作者發(fā)感慨了)。

          下面是例子程序:
          import java.sql.Connection;
          import java.sql.Statement;
          import java.sql.ResultSet;
          import java.sql.DriverManager;

          public class ExcelReader {

          ????public static void main( String[] args ) {

          ????????Connection c = null;
          ????????Statement stmnt = null;
          ????????try {
          ????????????Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
          ????????????c = DriverManager.getConnection( "jdbc:odbc:Book1", "", "" );
          ????????????stmnt = c.createStatement();
          ????????????String query = "SELECT test1 FROM [Sheet1$] WHERE test1='測試'";
          ????????????ResultSet rs = stmnt.executeQuery( query );
          ????????????
          ????????????System.out.println( "查得匹配'測試'的test1的記錄為:" );
          ????????????while( rs.next() ) {
          ????????????????System.out.println( rs.getString( "test1" ) );
          ????????????}
          ????????}
          ????????catch( Exception e ) {
          ????????????System.err.println( e );
          ????????}
          ????????finally {
          ????????????try {
          ????????????????stmnt.close();
          ????????????????c.close();
          ????????????}
          ????????????catch( Exception e ) {
          ????????????????System.err.println( e );
          ????????????}
          ????????}
          ????}
          }

          在此程序中,主函數(shù)main() 建立了一個數(shù)據(jù)表的連接,并取出符合條件的記錄。

          (譯者注:另外,我這里還有一段程序,是讀取所有記錄的程序,僅作參考):

          import java.sql.Connection;
          import java.sql.Statement;
          import java.sql.ResultSet;
          import java.sql.ResultSetMetaData;
          import java.sql.DriverManager;

          public class ExcelReader {

          ????public static void main(String[] args){
          ????????Connection connection = null;

          ????????try{
          ????????????Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          ????????????Connection con = DriverManager.getConnection( "jdbc:odbc:Book1","","" );
          ????????????Statement st = con.createStatement();
          ????????????ResultSet rs = st.executeQuery( "SELECT * FROM [Sheet1$]" );

          ????????????ResultSetMetaData rsmd = rs.getMetaData();
          ????????????int numberOfColumns = rsmd.getColumnCount();

          ????????????while (rs.next()) {
          ????????????????for (int i = 1; i <= numberOfColumns; i++) {
          ????????????????????if(i>1)??//用逗號分隔各列
          ??????System.out.print(", ");
          ????????????????????String columnValue = rs.getString(i);
          ????????????????????System.out.print(columnValue);
          ????????????????}
          ????????????????System.out.println("");
          ????????????}

          ????????????st.close();
          ????????????con.close();


          ????????} catch(Exception ex) {
          ????????????System.err.print("Exception: ");
          ????????????System.err.println(ex.getMessage());
          ????????}
          ????}

          }

          posted on 2006-06-30 16:51 software5168 閱讀(9998) 評論(4)  編輯  收藏 所屬分類: Java學習

          評論

          # re: 使用Java讀取Excel文件內(nèi)容 2008-10-22 10:12 LWS

          有點不太明白 難道只能讀一列~?  回復  更多評論   

          # re: 使用Java讀取Excel文件內(nèi)容[未登錄] 2009-02-02 16:35 abc

          謝謝樓主,太好了。  回復  更多評論   

          # re: 使用Java讀取Excel文件內(nèi)容 2011-01-25 14:19 fengzhisha0914

          好是好,不過不太實用,可能對于做開發(fā)的人員,設(shè)置一下odbc連接沒什么問題,但是程序用戶多了. 有辦法讓用戶都設(shè)置嗎.  回復  更多評論   

          # re: 使用Java讀取Excel文件內(nèi)容 2013-01-06 08:29 陳露

          字段內(nèi)容太長讀取不出來怎么辦?  回復  更多評論   

          <2008年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          收藏夾

          JAVA學習網(wǎng)站

          綜合

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 张家界市| 内江市| 黎川县| 南阳市| 多伦县| 威远县| 武山县| 凤城市| 高淳县| 中牟县| 尼玛县| 鹤庆县| 天柱县| 和田市| 巩留县| 米林县| 吴堡县| 綦江县| 黄梅县| 苍山县| 苏尼特右旗| 穆棱市| 吉木萨尔县| 岢岚县| 石泉县| 宜兴市| 阿合奇县| 疏勒县| 铜鼓县| 聂荣县| 交城县| 砀山县| 神木县| 辽阳市| 临泉县| 定南县| 长垣县| 安陆市| 得荣县| 天等县| 沐川县|