我用C#读EXCELL 表格时遇到下面问题:
如果一列中有以下情况:
1,2,3,4
1,2
1
22
表格属性都是 “常规”
我用如下语句实现表格到数据集的转化:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = "select * from [sheet1$] ";
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(dataSet1, "[sheet1$]"); //动作测试表填入
//动作测试数据集:dataSet1中
但是读“1”和“22”所在的单元格的字符串时,得到该单元格的值是空的。不能取出其值。但是如果在“1”和“22"前加”'“ 单引号。则不会出现这种问题
请高手指教。谢谢!!!!
如果一列中有以下情况:
1,2,3,4
1,2
1
22
表格属性都是 “常规”
我用如下语句实现表格到数据集的转化:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = "select * from [sheet1$] ";
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(dataSet1, "[sheet1$]"); //动作测试表填入
//动作测试数据集:dataSet1中
但是读“1”和“22”所在的单元格的字符串时,得到该单元格的值是空的。不能取出其值。但是如果在“1”和“22"前加”'“ 单引号。则不会出现这种问题
请高手指教。谢谢!!!!
然后使用程序读取就可以读出来了楼主记得多给些分啊
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'
这句:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
改成:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
//"HDR=Yes;" indicates that the first row contains columnnames, not data
//"IMEX=1;" tells the driver to always read "intermixed" data columns as text
//"IMEX=1;" tells the driver to always read "intermixed" data columns as text如果还会出现空,可以参考下面的处理空值的方法:
http://www.cnblogs.com/Roger52027/archive/2006/12/28/606016.aspx
2.
注册表修改内容如下:在HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel有一个TypeGuessRows值,预设是8,表示会先读取前8列来决定每一个栏位的型态,所以如果前8列的资料都是数字,到了第9列以后出现的文字资料都会变成null,所以如果要解决这个问题,只要把TypeGuessRows机码值改成0,就可以解这个问题了。