使用ACE.OLEDB.12.0和IMEX = 1读取Excel工作表不起作用

我使用下面的连接string与ACE.OLEDB.12.0从XLSX电子表格读取数据,但我设置IMEX = 1,它不起作用,而当我完全删除IBEX = 1时,它工作正常。

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Working Folder\ICDE\Ramsden 4.xlsx;Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=1;""" 

任何人都可以解释为什么,因为我有一个印象IMEX = 1作为文本读取所有数据,所以它更安全!

谢谢

J.P

IMEX = 1 不会将所有数据作为文本返回。 这是一个很常见的误解。

OLEDB所做的是扫描前n行(默认值= 8)并确定数据types。 如果忽略IMEX = 1,那么对于任何不匹配该数据types的值将返回Null。 如果您包含IMEX = 1并且扫描遇到混合数据types,那么它将返回文本。 如果您的工作表有一个文本标题,则可以通过指定HDR = No并放弃标题来帮助完成此过程。 但OLEDB将始终扫描前n行以确定数据types并相应地返回结果。

要扫描的行由TypeGuessRows的值决定。

较旧的Microsoft.Jet.OLEDB.4.0驱动程序将允许您在连接string中指定TypeGuessRows,但Microsoft.ACE.OLEDB.12.0不会。 TypeGuessRows现在保存在registry下…

 Excel 2007: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows Excel 2010: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows Excel 2013: HKEY_LOCAL_MACHINE\Software\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

运行在64位机器上的32位应用程序将在Wow6432Node下find它们。 例如..

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 

我认为这是倒退的一步,但我必须有一个正当的理由。 如果你发现一个让我们知道。