问题:我能用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语句中的保留字。life is never easy(译者注:作者发感慨了)。
下面是例子程序:
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 );
}
}
}
}
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 Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器