• Microsoft.ACE.OLEDB.12.0 读取混合列


    当用OLEDB读取Excel的时候,解决同一列中“字符串”和“数字”两种格式同时存在,读取时不能正确显示“字符串”格式的问题: 

                DataSet dataSet = new DataSet();
                OleDbConnection oleDbConnection = null;
                try
                {
                    oleDbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties="Excel 8.0;IMEX=1;"");//Microsoft.Jet.OLEDB.4.0
                    OleDbCommand selectCommand = new OleDbCommand();
                    selectCommand.Connection = oleDbConnection;
                    selectCommand.CommandText = "select * from [" + sheetName + "]";
                    selectCommand.CommandType = CommandType.Text;
                    OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand);
                    dataSet = new DataSet();
                    adapter.Fill(dataSet);
                }
                catch (Exception exception)
                {
                    oleDbConnection.Close();
                }
                finally
                {
                    oleDbConnection.Close();
                }

    当我们设置IMEX=1时将强制混合数据转换 为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行 为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。 

    另一个改进的措施是IMEX=1与注册表 值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过 修改“HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftOffice12.0Access Connectivity EngineEnginesExcel”下的该注册表值来更 改采样行数。如果设置为0,将分析所有数据行。

    注意:Excel表数据列是单一列数据类型还是混合列数据类型列,是由取样行决定 而不是整列数据觉定。

  • 相关阅读:
    IDEA 工具使用报错总结
    Struts2 值栈总结(ValueStack)
    hibernate 中映射关系配置
    Java 注解之总结
    ssh_整合总结
    Ajax 请求之_请求类型详解
    C++的重载赋值运算符
    vector容器使用reserve预留空间
    C++中的内存分配
    C++ const修饰指针
  • 原文地址:https://www.cnblogs.com/JYuAn/p/9243204.html
Copyright © 2020-2023  润新知