2010-09-16 69 views
1

我试图从Excel电子表格导入一些数据到使用OleDB的C#应用​​程序中。我用与IMEX=1,HDR=YES选项使用C#/ OLEDB从Excel导入时的值更改

提供商= Microsoft.ACE.OLEDB.12.0的标准连接串;数据源= {0};扩展 属性= “Excel的12.0; HDR = YES; IMEX = 1”

我有一列其中的值大部分是文本:TRUE或FALSE。部分地方有一些空白值。当导入发生时,BLANK值被替换为空字符串。这大概是因为OleDB将列的数据类型确定为布尔值,并且不会导入任何非布尔值,如BLANK。

我试过this answer的解决方案,但它没有奏效。即使当我预先创建DataTable并将其列设置为全部具有字符串的数据类型时,BLANK值仍然会被删除。

我试图在同一个问题中建议注册表项,但没有效果。

是否有任何追索权?或者我将不得不尝试使用COM?我们没有SpreadsheetGear的预算,因此我不能使用excellibrary,因为我主要处理.xlsx文件。

在此先感谢

+0

对此有什么好运?我有类似的问题。 – 2010-11-29 19:33:13

回答

0

尝试将Excel文件保存为CSV格式并进行处理。

0

我知道我迟了三年,但这可能有助于某人。所有功劳去Andrew Garrison谁发布了他的答案here。 您需要修改注册表设置:

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

变化TypeGuessRows0ImportMixedTypesText此项下。

ACE扫描前8行并尝试猜测列格式。与之后格式不匹配的其他所有内容都将返回为NULL。将TypeGuessRow设置为0将强制驱动程序扫描所有行以确定格式(当然,这会影响性能)。 ImportMixedTypes = text指定具有混合格式的列应该作为文本导入,就像你的情况一样。