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

我试图从Excel电子表格导入一些数据到我的C#应用​​程序使用OleDB。 我使用IMEX=1,HDR=YES选项的标准连接string

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

我有一个列的值大部分是文本:TRUE或FALSE。 下半部分有几个值的空白。 当导入发生时,BLANK值被replace为空string。 这大概是因为OleDB确定列的数据types为布尔值,并且不导入任何非布尔值,如BLANK。

我在这个答案尝试解决scheme,但它没有奏效。 即使当我预先创buildDataTable并将其列设置为全部具有string的数据types时,BLANK值仍将被删除。

我曾尝试黑客在同一个问题中提出的registry键,但没有效果。

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

提前致谢

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

我知道我迟了三年,但这可能有助于某人。 所有功劳都归功于Andrew Garrison ,他在这里发表了他的答案。 您需要修改registry设置:

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

TypeGuessRows更改为0ImportMixedTypes此types的ImportMixedTypes更改为Text

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