在从excel往dataset读取的时候,此时如果excel中的某列,比如A列,就算A列为同一种格式,只要A中的某几项左上角有小三角,有的没有小三角,那么读到dataset去的时候,就会有些出问题:有些为空了。有人也遇到同样的问题么?请教下怎么处理呢?我的office是2003的,读取代码如下:
                    string strSeleCmd = "select *";
                    strSeleCmd = strSeleCmd + " FROM [Sheet1$] ";
                    myConn.Open();
                    OleDbDataAdapter myCommand = new OleDbDataAdapter(strSeleCmd, myConn);
                    myDataSet5 = new DataSet();
                    myCommand.Fill(myDataSet5, "[Sheet1$]");
                    myConn.Close();

解决方案 »

  1.   

    设置列的单元格格式
    遍历excel看看值
      

  2.   

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
    HDR设置成YES表示第一行当作标题行IMEX=1表示读入数据是混合格式的,设置成1也许可以解决你的这个问题,
    但是有时候IMEX=1设置成1也没有用,那就直接让用户在导入数据前将单元格格式设置成文本格式。
    文本格式方式可以让用户把Excel数据复制到txt文档中,然后粘贴到一个已经将单元格设置成文本的Eexcel中
      

  3.   

    IMEX是用来告诉驱动程序使用Excel文件的模式,其值有0、1、2三种,分别代表导出、导入、混合模式。当我们设置IMEX=1时将强制混合数据转换为文本,但仅仅这种设置并不可靠,IMEX=1只确保在某列前8行数据至少有一个是文本项的时候才起作用,它只是把查找前8行数据中数据类型占优选择的行为作了略微的改变。例如某列前8行数据全为纯数字,那么它仍然以数字类型作为该列的数据类型,随后行里的含有文本的数据仍然变空。
    另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。
      

  4.   

    呵呵,前几天我做excel导入时也遇到过和楼主一样的问题,我是在excel直接把错误忽略了,不知还有没有更方便的方法
      

  5.   

    先把EXCEL的单元格式调统一再导行不行?!