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_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel”下的该注册表值来更 改采样行数。如果设置为0,将分析所有数据行。

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

 

posted @ 2018-06-29 14:18  YuAn'  阅读(914)  评论(0编辑  收藏  举报