問題:我能用Java讀取一個Excel檔嗎?如果能,怎麼做?
回答:是的,可以用Java讀取Microsoft Excel檔案。微軟提供了一個Excel的ODBC驅動程序,因此我們就可以使用JDBC和Sun的JDBC-ODBC驅動來讀取Excel檔案了。
如果你有個Excel文件,名為Book1.xls(譯者註:由於原文的例子我沒有下載下來,所以我用了自己的例子),並且,該文件中有一個工作表(sheet)名為Sheet1,微軟的ODBC驅動程式將工作表中的第一行當作列名(譯者註:即欄位名稱),工作表名作為資料庫表名。要透過JDBC存取工作表,我們還必須建立一個新的ODBC資料來源,在Windows 2000系統上建立資料來源的過程如下:
進入「控制台「管理工具「資料來源(ODBC), (譯者註:開啟後選擇系統DSN),點選新增,在彈出視窗中選擇「Driver do Microsoft Excel(*.xls)
#然後在資料來源名稱中輸入你一個名字Book1(譯者注意:相當於資料庫名稱),然後點選「選擇工作簿,然後找到並選取你的Excel檔案
點選確定後,系統資料來源清單中會出現你設定的資料來源名稱,現在資料表已經在資料來源清單裡了(譯者註:點擊確定完成配置)。
(譯者註:我的例子中)現在如果我們想挑出test1列中的所有「測試值,那就需要用以下的SQL查詢:
SELECT test1 FROM [Sheet1$] WHERE test1='測試'
要注意的是工作表名後面跟了一個「$符號,這個符號是不可缺少的。為什麼?因為他的前後有方括號,因為「$是SQL語句中的保留字。
下面是範例程式:
#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 ); 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 ); } } } } |
在此程式中,主函數main() 建立了一個資料表的連接,並取出符合條件的記錄。
(譯者註:另外,我這裡還有一段程序,是讀取所有記錄的程序,僅作參考):
|
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());
}
}
}
登入後複製
###
以上是如何使用Java讀取Excel文件內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!