我正在使用下面的连接字符串和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的唯一方法。在这里,一切都将被视为文本。
答案 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;'"/>