使用C#/ OLEDB从Excel导入时值会更改

时间:2010-09-16 12:39:57

标签: c# excel oledb

我正在尝试使用OleDB将一些数据从Excel电子表格导入到我的C#应用​​程序中。我使用标准连接字符串和IMEX=1,HDR=YES选项

  

Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {0}; Extended   属性=“Excel 12.0; HDR = YES; IMEX = 1”

我有一个列,其值主要是文本:TRUE或FALSE。在那里,有一些BLANK值。导入发生时,BLANK值将替换为空字符串。这可能是因为OleDB确定列的数据类型是布尔值,并且不导入任何非布尔值,如BLANK。

我在this answer中尝试了解决方案,但它没有用。即使我预先创建DataTable并将其列设置为all都具有string的数据类型,BLANK值也会继续被删除。

我曾尝试黑客攻击同一问题中建议的注册表项,但没有效果。

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

提前致谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我知道我迟到了三年,但这可能对某人有所帮助。所有赠送金额都归Andrew Garrison人发布了答案here。 您需要修改注册表设置:

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

在此密钥下将TypeGuessRows更改为0,将ImportMixedTypes更改为Text

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