2014-01-27 72 views
0

在將數據從excel導入到VB.net中的datagridview期間,我遇到了一個問題。 而我不知道或從哪裏開始尋找問題。這裏的情況: 我有一個Excel文件,vb.net將錯誤的數據從excel導入到datagridview中

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 

回答

0

您的時間正在轉換爲十進制。您需要一次閱讀它們,但這會導致列值爲文本的問題,例如。 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 
+0

謝謝你這麼多的時間,但有沒有另一種方法,我可以將第二行及時轉換爲字符串,以便顯示正確的數據? – Aljie

+0

正如他們所說的那樣,總有更多的方法來給貓換膚。如果你不能在Excel中分割數據,你將需要編寫代碼來檢查數據中的內容,並提取你需要的內容。除非沒有別的選擇,否則這不是我想要採用的路線。 – Mych

+0

我已經有這樣的代碼:TRIM(FORMAT(F2,'hh:mm AM/PM')),但只有早上6點轉換爲12:25 AM,這是錯誤的。 – Aljie

相關問題