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

时间:2017-09-12 07:23:57

标签: .net excel oledb

我正在使用下面的连接字符串和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;"""

任何人都可以解释原因吗? 因为我的印象是IMEX = 1将所有数据作为文本读取,所以它更安全!

由于

JP

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:-1)

对我有用的是在连接字符串中设置IMEX = 0。我有一个SELECT和UPDATE语句,而当IMEX = 1时,只有SELECT语句正在工作。现在,当IMEX = 0时,两者都可以正常工作

<add name="ExcleConn" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\ServerPath\Folder\GroupScheduling.xlsm;
     Extended Properties='Excel 12.0 Macro;HDR=YES;IMEX=0;Persist Security Info=False;ReadOnly=0;'"/>