Ste*_*eve 32
"如果要将列标题读入结果集(使用HDR = NO,即使有标题)并且列数据是数字,请使用IMEX = 1以避免崩溃.
始终使用IMEX = 1是检索混合数据列的数据的更安全的方法..."
请注意,当您需要将数据写回Excel时,IMEX值非常重要.在IMEX上快速搜索互联网上发现了许多关于各种IMEX值问题的文章
Mag*_*nus 12
使用OleDbConnection读取Excel文件时可能存在问题.
如果你使用
"Extended Properties='Excel 8.0;HDR=NO;IMEX=3;'"
Run Code Online (Sandbox Code Playgroud)
对于如下所示的列,其中前8行具有4个(或更多)数值,则该类型被视为数字,字符串值被读取为null.
请注意,标头在此处不用作标题(HDR = NO),因此"zipcode"行是第一行.(这些邮政编码来自瑞典,以防您无法识别其格式.)
1) zipcode
2) 125 45
3) 115 50
4) 18735
5) 11335
6) 13940
7) 181 55
8) 11759
9) 176 74
10) 137 38
Run Code Online (Sandbox Code Playgroud)
但是,如果您的数据看起来像这样,其中只有3个是前8行的数字
1) zipcode
2) 125 45
3) 115 50
4) 18735
5) 11335
6) 139 40 <-- This one changed so that it is a string
7) 181 55
8) 11759
9) 176 74
10) 137 38
Run Code Online (Sandbox Code Playgroud)
然后它工作,它读取所有,作为字符串.
所以第一种情况是一个问题.但有一个解决方案.
假设您使用
"Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'"
Run Code Online (Sandbox Code Playgroud)
在我们将IMEX更改为1并将HDR更改为YES的情况下,它将在上述两种情况下将数据读取为字符串.但是,假设我们有这样的数据
1) zipcode
2) 12545
3) 11550
4) 18735
5) 11335
6) 13940
7) 18155
8) 11759
9) 17674
10) 137 38
Run Code Online (Sandbox Code Playgroud)
然后所有前8个数据行都是数字,然后它再次失败,即使我们有IMEX = 1.
您可以通过以下方式解决此问题.将连接字符串更改为此
"Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'"
Run Code Online (Sandbox Code Playgroud)
请注意,我们保持IMEX = 1,但将HDR更改为NO.
现在第1行不再被视为标题,"zipcode"被读作数据,因为它显然是一个字符串,所有行都被读作字符串(这就是IMEX = 1的工作原理).
这种方法有一些缺点.两者都可以解决:
1)您不能通过其名称(zipcode)引用该列,但需要使用例如F7,具体取决于列的位置.
您可以通过确定zipcode列所在的位置(可以通过编程方式完成)来解决此问题,并通过将"zipcode"更改为"F7"来相应地更改SQL文本.
2)值"zipcode"将出现在您的数据中.
这可以通过在where子句中使用F7 <>'zipcode'来解决.有人可能会认为这会抵消我们包含zipcode(作为字符串)以确保所有行都被视为字符串的事实.经过测试后,事实证明,排除"zipcode"的where子句技巧没有这样的抵消效果.
| 归档时间: |
|
| 查看次数: |
66127 次 |
| 最近记录: |