我正在尝试使用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文件。
提前致谢
答案 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指定具有混合格式的列(如您的情况)应作为文本导入。