Excel单元格格式问题

Jon*_*onn 6 .net oledb excel

我正在使用OleDB DataReader从我的excel文件中获取数据(但是这个问题也出现在DataTable.Fill中).问题是我有一个应该返回字符串的列.一切都很好并且工作但是最近出现了一个问题,因为列的单元格具有不同的格式.有些是数字,有些是文本.当我使用dataReader.GetSchema()检查时,它显示有问题的列被推断为类型System.String.这个问题是所有非文本单元格都立即设置为null.

有没有办法向读者建议该列应该只是将列解析为System.Object而不是将其推断为System.String并转储所有非字符串单元格?

我正在使用的连接字符串是:

string connString ="Provider = Microsoft.Jet.OLEDB.4.0;" +"数据源="+ 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();
}
Run Code Online (Sandbox Code Playgroud)

AMi*_*ico 7

您需要将IMEX或MAXSCANROWS添加到连接字符串.

MAXSCANROWS - 要扫描的行数,以确定每列的数据类型.根据找到的最大数据类型确定数据类型.如果遇到的数据与为该列猜测的数据类型不匹配,则数据类型将作为NULL值返回.

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

此外,请查看位于注册表REG_DWORD"TypeGuessRows"的[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel].这是不让Excel仅使用前8行来猜测列数据类型的关键.将此值设置为0可扫描所有行.这可能会影响性能.