none
使用OleDb直接操作 excel,但出现多读取空白行的问题 RRS feed

  • 问题

  • 例如,excel文件有10行有效数据,结果读出15行?
    代码如下:
    //获取excel的数据
    Protected Function excelToDataSet(ByVal fileName As String) As DataSet
            Dim strConn As String = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & fileName & ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'"
            Dim ds As DataSet = New DataSet

            Try
                Dim Conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(strConn)
                Dim objCmd As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("select * from [Sheet1$]", Conn)

                Conn.Open()
                objCmd.Fill(ds, "techerInfo")
                Conn.Close()

            Catch ex As Exception
                lblMsg.Text = ex.Message
            End Try

            Return ds
        End Function

    //使用数据
    '把数据写入数据库
                Dim ds As DataSet = excelToDataSet(filePath)
                Dim dr As DataRow() = ds.Tables(0).Select()

         。。。。。。
        For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
               。。。。。。。
       next


    那里出错误了?
    我把excel文件里的空白行删除也不行??
    2010年2月25日 8:09

答案

  •  //过滤掉空白行
        DataTable newdt=ds.Tables["data"].Clone();//克隆一个结构一样的表
       foreach(DataRow sdr in ds.Tables["data"].Rows)
        {
      //如果有一列为不为空的话
         if (sdr[0].ToString()!=""||sdr[1].ToString()!="" )    
       {
         newdt.Rows.Add(sdr.ItemArray);
         }
       }
       //删除原有表,增加新表
        ds.Tables.Remove("data");
        newdt.TableName="data";
        ds.Tables.Add(newdt);
    

    努力+方法=成功
    2010年2月25日 9:48