日期:2014-05-20  浏览次数:20883 次

c# 读EXCELL 表格问题(有空值)
我用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 "前加” '“   单引号。则不会出现这种问题
      请高手指教。谢谢!!!!
       


------解决方案--------------------
你直接读取DataSet的数据不就行了吗?至于有空的记录你可以用where筛选下..不明白你的意思.
------解决方案--------------------
你所说的读是不是取你现在的dataSet1中的值 ?没试过,但我想也是要加上 " ' "这个的,因为一个DATATABLE中的一个COLUMU的类型是不会出现CHAR和NUMERIC吧。
------解决方案--------------------


是因为读取时,dataset不能正确的分配列表的类型,在程序中不好写,可以在Excel里选择要传入的列,然后选择工具栏上的数据--> 分列,会有一个新窗口,几个下一步之后,会有一个转换类型的窗口,在里面选择转为文本,确定保存就可以了。
然后使用程序读取就可以读出来了

楼主记得多给些分啊
------解决方案--------------------
将excel绑定到datagrid中,然后去判断哪个格子是空值就行拉。
------解决方案--------------------
连接字符串改为
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1; '
------解决方案--------------------
直接读sheet表的 xl.usedRange.Rows.count 不行么?
------解决方案--------------------
定义宏 将表格内容变成文本。
------解决方案--------------------
livode是正解!
// "HDR=Yes; " indicates that the first row contains columnnames, not data
// "IMEX=1; " tells the driver to always read "intermixed " data columns as text