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

JPS*_*rri 4 .net oledb excel

我使用下面的连接字符串与ACE.OLEDB.12.0从XLSX电子表格中读取数据,但是我设置IMEX = 1,当我完全删除IMEX = 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;"""
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?因为我的印象是IMEX = 1将所有数据作为文本读取,所以它更安全!

谢谢

J.P

IMEX = <0/1/2> IMEX指的是IMport EXport模式.这可能需要三个可能的值.

IMEX = 0且IMEX = 2将导致忽略ImportMixedTypes并使用默认值'Majority Types'.在这种情况下,它将占用前8行,然后确定每列的数据类型.

IMEX = 1是将ImportMixedTypes的值设置为Text的唯一方法.在这里,一切都将被视为文本.

Cia*_*rán 10

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

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

要扫描的行由TypeGuessRows的值确定.

较旧的Microsoft.Jet.OLEDB.4.0驱动程序允许您在连接字符串中指定TypeGuessRows但Microsoft.ACE.OLEDB.12.0不允许.TypeGuessRows现在保存在注册表中......

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
Run Code Online (Sandbox Code Playgroud)

在64位计算机上运行的32位应用程序将在Wow6432Node下找到它们.例如..

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows
Run Code Online (Sandbox Code Playgroud)

在我看来这是一个倒退的步骤,但我必须有一个合理的理由.如果你找到一个让我们知道.

  • 不,遗憾的是没有。要扫描的行在注册表中为 TypeGuessRows,如上所述。 (2认同)
  • 是否有地方描述了这些值? (2认同)