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

Reading Excel sheet using ACE.OLEDB.12.0 with IMEX=1 not working

我使用下面的 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是把所有的数据都读成文本,所以比较安全!

谢谢

日本

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

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

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

IMEX=1 不会 return 所有数据都是文本。这是一个非常普遍的误解。

OLEDB 所做的是扫描前 n 行(默认值=8)并确定数据类型。如果您省略 IMEX=1,那么对于与该数据类型不匹配的任何值,它将 return 为空。如果您包含 IMEX=1 并且扫描遇到混合数据类型,那么它将 return 文本。如果您的 sheet 有一个文本 header,那么您可以通过指定 HDR=No 并丢弃 header 来帮助这个过程。但是,OLEDB 将始终 扫描前 n 行以确定数据类型并return 相应地得到结果。

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

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

Excel 2007: HKEY_LOCAL_MACHINE\Software\Microsoft\Office.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows
Excel 2010: HKEY_LOCAL_MACHINE\Software\Microsoft\Office.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows
Excel 2013: HKEY_LOCAL_MACHINE\Software\Microsoft\Office.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows

32 位应用程序 运行 在 64 位机器上可以在 Wow6432Node 下找到它们。例如...

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

这在我看来是倒退,但我想一定有正当理由。如果您找到一个,请告诉我们。

对我有用的是在连接字符串中设置 IMEX=0。我有一个 SELECT 和一个 UPDATE 语句,只有 SELECT 语句在 IMEX=1 时有效。现在当 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;'"/>