Office2007出来后,原本2003的链接字符串要改了。
Excel2003 使用 string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + exaddress + ";" + "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
Excel2007 使用 string sConnectionString= "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + exaddress+ ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
2007向下兼容。
但如果发现提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序” ,请下载2007 Office system 驱动程序:数据连接组件安装
http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe
如果是64位系统,请在IIS,对应的应用程序池,“高级设置” 启用 32位应用程序。
否则,依然会提示上面的错误。
导入的完整代码如下:
public static DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName)
{
//string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此连接可以操作.xls与.xlsx文件
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();
System.Data.OleDb.OleDbDataAdapter odda = new System.Data.OleDb.OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", SheetName), conn); //("select * from [Sheet1$]", conn);
odda.Fill(ds, SheetName);
conn.Close();
return ds.Tables[0];
}