Microsoft Jet OLE DB 4.0
标准连接
Provider=
Microsoft.Jet.OLEDB.4.0;
Data Source=
C:\MyExcel.xls;
Extended Properties=
"Excel 8.0;HDR=Yes;IMEX=1";
标准连接的另一种语法
上面的语法如果不能正常工作时,可以下面的尝试这种语法,一些反馈中提到,Excel 2003需要附加在连接字符串首添加 OLEDB
OLEDB;
Provider=
Microsoft.Jet.OLEDB.4.0;
Data Source=
C:\MyExcel.xls;
Extended Properties=
"Excel 8.0;HDR=Yes;IMEX=1";
重点提示!
双引号 " 需要在你的编程语言中进行字符转义处理
c#, c++ \"
VB6, VBScript ""
xml (web.config 等) "
或者使用 '
HDR=Yes,代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
"IMEX=1;" 通知驱动程序以文本格式读取混合型的列(如数字、日期、字符串等)。需要注意的是,这个选项可能会导致Excel文件的写入拒绝
SQL 语法 " SELECT [列名1], [列名12] FROM [Sheet1$]". 即Excel工作表名后加上"$",在"[ ]"内加入列名
检查本地注册表键值[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]子键,找到其中的 "TypeGuessRows"(REG_DWORD数据类型)键。这个数值表示,决定ISAM驱动程序从前n条数据采样确定数据类型,默认为8,将这个值改成0,可以对所有行进行采样,不过性能开销很大。另请注意,有些时候,设置选项IMEX=1可能会导致IMEX驱动程序只进行8行采样。用IMEX=0代替可以确定注册表值TypeGuessRows=0起效
如果Excel设置了密码保护,将不能打文件开读取数据,哪怕是在连接字符串中配置了正确的密码,你会收到这样的错误信息 "Could not decrypt file"
双引号 " 需要在你的编程语言中进行字符转义处理
c#, c++ \"
VB6, VBScript ""
xml (web.config 等) "
或者使用 '
HDR=Yes,代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
"IMEX=1;" 通知驱动程序以文本格式读取混合型的列(如数字、日期、字符串等)。需要注意的是,这个选项可能会导致Excel文件的写入拒绝
SQL 语法 " SELECT [列名1], [列名12] FROM [Sheet1$]". 即Excel工作表名后加上"$",在"[ ]"内加入列名
检查本地注册表键值[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]子键,找到其中的 "TypeGuessRows"(REG_DWORD数据类型)键。这个数值表示,决定ISAM驱动程序从前n条数据采样确定数据类型,默认为8,将这个值改成0,可以对所有行进行采样,不过性能开销很大。另请注意,有些时候,设置选项IMEX=1可能会导致IMEX驱动程序只进行8行采样。用IMEX=0代替可以确定注册表值TypeGuessRows=0起效
如果Excel设置了密码保护,将不能打文件开读取数据,哪怕是在连接字符串中配置了正确的密码,你会收到这样的错误信息 "Could not decrypt file"
ACE OLEDB 12.0
Excel 97-2003 .xls文件
可以在连接字符串中使用 Office 2007 OLEDB 驱动程序 (ACE 12.0) 连接老版的 97-2003 Excel 工作簿
Provider=
Microsoft.ACE.OLEDB.12.0;
Data Source=
c:\myFolder\myOldExcelFile.xls;
Extended Properties=
"Excel 12.0;HDR=YES";
HDR=Yes,代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
.NET Framework Data Provider for OLE DB
桥接到 Jet OLE DB 4.0
这里仅仅展示了一个OdbcConnection类的连接字符串例子,这个类封装了底层的OLEDB提供程序。结合本例,可以了解各种OLE DB提供程序的更多连接字符串。
Provider=
Microsoft.Jet.OLEDB.4.0;
Data Source=
C:\MyExcel.xls;
Extended Properties=
"Excel 8.0;HDR=Yes;IMEX=1";
Microsoft Excel ODBC Driver
标准连接
Driver=
{Microsoft Excel Driver (*.xls)};
DriverId=
790;
Dbq=
C:\MyExcel.xls;
DefaultDir=
c:\mypath;
SQL 语法 "
SELECT [列名1], [列名12] FROM [Sheet1$]". 即Excel工作表名后加上"$",在"[ ]"内加入列名
关闭只读连接
[Microsoft][ODBC Excel Driver] 当操作必须要使用一个可更新的查询时,使用这种连接字符串可以避免错误
Driver=
{Microsoft Excel Driver (*.xls)};
Dbq=
C:\MyExcel.xls;
ReadOnly=
0;
Excel 的 ODBC 连接默认为只读,ReadOnly = 0 表示连接可更新
String cnnstring = cnnstring = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + xlsFilePath + ";Extended Properties=\"Excel 12.0;HDR=No;IMEX=1\"";
DataSet ds = new DataSet();
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(cnnstring);
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", conn);
try
{
adapter.Fill(ds);
}
catch (System.Exception ex)
{
ds = null;
}