在从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();
string strSeleCmd = "select *";
strSeleCmd = strSeleCmd + " FROM [Sheet1$] ";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strSeleCmd, myConn);
myDataSet5 = new DataSet();
myCommand.Fill(myDataSet5, "[Sheet1$]");
myConn.Close();
遍历excel看看值
HDR设置成YES表示第一行当作标题行IMEX=1表示读入数据是混合格式的,设置成1也许可以解决你的这个问题,
但是有时候IMEX=1设置成1也没有用,那就直接让用户在导入数据前将单元格格式设置成文本格式。
文本格式方式可以让用户把Excel数据复制到txt文档中,然后粘贴到一个已经将单元格设置成文本的Eexcel中
另一个改进的措施是IMEX=1与注册表值TypeGuessRows配合使用,TypeGuessRows 值决定了ISAM 驱动程序从前几条数据采样确定数据类型,默认为“8”。可以通过修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的该注册表值来更改采样行数。但是这种改进还是没有根本上解决问题,即使我们把IMEX设为“1”, TypeGuessRows设得再大,例如1000,假设数据表有1001行,某列前1000行全为纯数字,该列的第1001行又是一个文本,ISAM驱动的这种机制还是让这列的数据变成空。