Excel单元格格式问题

我正在使用OleDB DataReader从我的Excel文件中获取数据(但是这个问题也发生在DataTable.Fill中)。 问题是我有一个应该返回string的列。 一切都很好,但最近,一个问题出现了,因为列的单元格有不同的格式。 一些在数字和其他文字。 当我使用dataReader.GetSchema()检查它显示有问题的列被推断为typesSystem.String。 这个问题是,所有的非文本单元立即被设置为空。

有没有办法build议读者,该列应该只parsing列为System.Object而不是推断它为System.String和转储所有非string单元格?

我正在使用的连接string是:

stringconnString =“提供程序= Microsoft.Jet.OLEDB.4.0;” +“Data Source =”+ filePath +“;” +“扩展属性= Excel 8.0;”;

代码是:

using ( OleDbConnection connection = new OleDbConnection( connString ) ) { connection.Open(); foreach ( string worksheetName in worksheetNames ) { using ( OleDbCommand command = new OleDbCommand( "SELECT * FROM [" + worksheetName + "]", connection ) ) { TEntity entity; using ( OleDbDataReader dataReader = command.ExecuteReader() ) { while ( dataReader.Read() ) { entity = GetDataFromDataTable( dataReader ); if ( entity != null ) { entityList.Add( entity ); } } } } } connection.Close(); } 

您需要将IMEX或MAXSCANROWS添加到连接string。

MAXSCANROWS – 扫描的行数,以确定每列的数据types。 数据types是根据find的最大数据types来确定的。 如果遇到与数据types不匹配的数据,该数据types将作为NULL值返回。

对于Microsoft Excel驱动程序,您可以input1到16之间的数字来扫描行。 该值默认为8; 如果设置为0,则扫描所有行。 (超出限制的数字将返回错误。)

此外,检查位于registryREG_DWORD“TypeGuessRows”[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel]。 这是不让Excel使用前8行来猜测列数据types的关键。 将此值设置为0以扫描所有行。 这可能会损害性能。

想到两件事情:

  1. 什么types是“TEntity”。 是否限于string或其他types?

  2. entityList是什么types的列表。 它是通用的,还是一个列表(TEntity),或其他types?