.net - Excel单元格格式问题

标签 .net excel oledb

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

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

我使用的连接字符串是:

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=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 添加到连接字符串。

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

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

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

关于.net - Excel单元格格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081708/

相关文章:

Excel 无法跨两个工作簿复制粘贴

vba - Excel VBA : Easy If function doesn't seem to work properly

c# - MS Access DB 在执行后不保存更改 (C#)

c# - 如何记录查询时间?

Oracle OLEDB 连接池和无效连接

.net - Linq 到实体 : does not recognize the method

c# - Magento Web 服务错误

c# - 文件中的变量(long、double...)存储方式是否错误?

c# - 使用 WinSCP .NET 程序集时,...\WinSCP.exe 的版本与该程序集的版本不匹配

php - Excel 中的用户导出在 Moodle 中损坏