注册 登录
编程论坛 VB.NET论坛

VB.NET读取EXCEL文件中的数据有问题?

binghe6610 发布于 2010-10-19 10:52, 4228 次点击
  Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\binghe.xls" & ";Extended Properties=Excel 8.0;" '定义连接字符串
        Dim oleDbConnection As OleDbConnection = New OleDbConnection(sConnectionString)
        oleDbConnection.Open()

        '获取excel表
        Dim dataTable As DataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
        '利用SQL语句从Excel文件里获取数据

      

        Dim query As String = "SELECT * FROM [sheet1$]"
        Dim oleAdapter As OleDbDataAdapter = New OleDbDataAdapter(query, sConnectionString)

        oleAdapter.Fill(dt)
这是我的读取代码
问题是:如果EXCEL表中某列的值有数字和字母,只能读取到字母(开头)的值,不知是何缘故
12 回复
#2
binghe66102010-10-19 10:55
想知道在读取EXCEL文件时,EXCEL表中的数据格式对读取到的内容有影响吗?
我把EXCEL表中的数据全部设置为文本格式也不行,数字开头的值读到的是空。
#3
binghe66102010-10-19 14:22
没有人遇到过这样的问题吗?自己顶
#4
binghe66102010-10-21 12:59
自己顶
#5
wei8551982010-10-23 16:44
帮顶
#6
不说也罢2010-10-23 19:46

项目里,一直都是对EXCEL文件本身进行读写,还没有做过将EXCEL作为数据源进行了读写操作。

此问题关注中。欢迎有引经验的不吝跟贴。
#7
不说也罢2010-10-24 10:58
作了一个改动,看对楼主是不是有用处。以下是我调试时的方法及代码

1、打开EXCEL工作簿,运行以下宏
程序代码:
With Sheet1
   For i = 1 To .UsedRange.Rows.Count
       For j = 1 To .UsedRange.Columns.Count
           .Cells(i, j) = "'" & .Cells(i, j)
       Next
    Next
End With


2、下面是VB2008中的程序代码:
程序代码:

        Dim fileName As String
        fileName = Application.StartupPath & "\binghe.xls"
        Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & fileName & "';Extended Properties=Excel 8.0;"
        Dim myDataset As New System.Data.DataSet
        Dim da As New OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn)
        Try
            da.Fill(myDataset)
            Me.DataGridView2.DataSource = myDataset.Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message.ToString)
        End Try



上述代码在VB2008中运行时,以OLEDB形式读取EXCEL时正常。
欢迎交流

[ 本帖最后由 不说也罢 于 2010-10-24 11:03 编辑 ]
#8
binghe66102010-10-24 15:41
没有测试7楼的代码,好像7楼只是加了一个宏。感觉应该不是宏的原因。
不过还是给分了
#9
不说也罢2010-10-24 15:57
对于用EXCEL做数据源,只需要在写入的时候为单元格赋值时加上"'"就行了,不需要在XLS文件中添加宏
目前没有发现比这更好的办法。期待更好的解决办法


楼主如果想从任意EXCEL文件中读取数据到DATAGRIDVIEW表格中,不建议用OLEDB的方式,建议直接用VB。NET对EXCEL进行读写,很方便面的。


#10
binghe66102010-10-30 11:38
9楼的方法有门,我试试
#11
binghe66102010-10-30 11:40
excel作为数据源,感觉应该在读取的时候按照excel单元格中的类型读取。但是事实不是这样,无论excel单元格中的数据类型是什么样的,都无法正确完整的读取。同样是微软的产品,为什么会出现这样的问题呢?
也许是我们还学道不精啊。大家共同学习吧
#12
binghe66102010-10-30 11:46
对于用EXCEL做数据源,只需要在写入的时候为单元格赋值时加上"'"就行了,不需要在XLS文件中添加宏
目前没有发现比这更好的办法。期待更好的解决办法

经测试9楼提供的这个方法可行。谢谢
#13
hqso2011-03-28 16:45
那个宏    转换了单元格中的文本格式 意义重大
1