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];
}