【问题标题】:vb.net imports wrong data from excel into datagridviewvb.net 将错误数据从 excel 导入 datagridview
【发布时间】:2014-02-18 02:24:50
【问题描述】:

我在 VB.net 中将数据从 excel 导入 datagridview 时遇到问题。 而且我不知道或从哪里开始寻找问题。情况如下: 我有一个excel文件,

Column A(General)     Column B(Time)

 Adarayan, Dianne       6:00 AM
 Bacalla, Cruz          1:30 PM
 Mariano, Kevin           RD
 Roses, Alice             VL
 Ligris, Paul           RD/OT 7:30 

在datagridview中输出/显示:

 Team Member            TimeSchedule

 Adarayan, Dianne         0.25
 Bacalla, Cruz            0.5625
 Mariano, Kevin           RD
 Roses, Alice             VL
 Ligris, Paul           RD/OT 7:30 

我不知道为什么会发生这种情况,当字符串像前 2 行时它显示浮动。 请大家帮忙。

这是我将数据从 excel 导入 datagridview 的代码。

  OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
    OpenFileDialog1.Filter = "Excel Files 2007 (*.xlsx)|*.xlsx|Excel Files 1997-2003 (*.xls)|*.xls"

    If OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then

        Try

            xlsApp = New Excel.Application
            xlsWorkBook = xlsApp.Workbooks.Open(OpenFileDialog1.FileName)
            xlsWorkSheet = xlsWorkBook.Worksheets("WORK SCHEDULE")
            'unprotect file 
            'Get last row used 
            'lastUsedRow = xlsWorkSheet.Range("I" & xlsWorkSheet.Rows.Count).End(Excel.XlDirection.xlUp).Row
            'Get last column 
            'lastUsedCol = xlsWorkSheet.Cells(1, xlsWorkSheet.Columns.Count).End(Excel.XlDirection.xlToLeft).Column

            Dim fi As New FileInfo(OpenFileDialog1.FileName)
            Dim sConnectionStringz As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OpenFileDialog1.FileName & ";" & "Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
            Dim objConn As New OleDbConnection(sConnectionStringz)
            objConn.Open()
            Dim x As Integer = 0
            Dim start As Integer
            Dim ends As Integer


            For Each c In xlsWorkSheet.Range("B1:B300").Cells
                If IsNothing(c.value) Then
                    x = x + 1
                ElseIf Not IsNothing(c.Value) Then
                    x = x + 1
                    If c.value.ToString.ToUpper <> "START" And c.value.ToString.ToUpper <> "END" Then
                    ElseIf c.value.ToString.ToUpper = "START" Then
                        start = x
                    ElseIf c.value.ToString.ToUpper = "END" Then
                        ends = x
                    End If
                End If
            Next

            Dim campaign = start + 1
            For Each c In xlsWorkSheet.Range("B" & campaign & ":B" & campaign).Cells
                If Not IsNothing(c.value) Then
                    campaignName = c.value.ToString
                End If
            Next

            Dim objAdapter1 As New OleDbDataAdapter("SELECT * FROM [WORK SCHEDULE$B" & start & ":I" & ends & "]", objConn)
            Dim objDataset1 As New DataSet
            objAdapter1.Fill(objDataset1)
            DataGridView1.DataSource = objDataset1.Tables(0).DefaultView
            With DataGridView1
                .RowHeadersVisible = False
                .Columns(0).HeaderCell.Value = "Team Members"
                .Columns(1).HeaderCell.Value = "Monday"
                .Columns(2).HeaderCell.Value = "Tuesday"
                .Columns(3).HeaderCell.Value = "Wednesday"
                .Columns(4).HeaderCell.Value = "Thursday"
                .Columns(5).HeaderCell.Value = "Friday"
                .Columns(6).HeaderCell.Value = "Saturday"
                .Columns(7).HeaderCell.Value = "Sunday"
            End With
            objConn.Close()
        Finally

    End Try
    End If

【问题讨论】:

    标签: vb.net excel datagridview type-conversion


    【解决方案1】:

    您的时间正在转换为十进制。您将需要将它们作为时间阅读,但这会导致列值是文本的问题,例如。 RD、VL、RD/OT 7:30 我建议您的 Excel 电子表格将此数据拆分为两列,例如类型和时间,这样您就可以...

    Column A(General)     Column B(Type) Column C(Time)
    Adarayan, Dianne                     6:00 AM
    Bacalla, Cruz                        1:30 PM
    Mariano, Kevin            RD
    Roses, Alice              VL
    Ligris, Paul             RD/OT       7:30 AM
    

    【讨论】:

    • 非常感谢您抽出宝贵的时间,但有没有其他方法可以将第二行及时转换为字符串,以便显示正确的数据?
    • 总是有更多的方法可以给猫剥皮……正如他们所说。如果您无法在 excel 中拆分数据,则需要编写代码来检查数据中的内容并提取您需要的内容。除非别无选择,否则我不会走这条路。
    • 我已经有一个代码:TRIM(FORMAT(F2, 'hh:mm AM/PM')),但只有上午 6:00 转换为上午 12:25,这是错误的.
    • 您似乎需要有关 excel 公式的建议(不是我的领域或专业知识)...我也可以建议您使用 24 小时格式,从长远来看可能会更容易。
    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多