2017-08-17 43 views
0

我想遍歷數據集中的一行。如果該行的第一個單元格的格式爲1234-Name,那麼我想從中刪除該數字(1234)並將其另存爲變量。基本上,第一個單元是員工和他們的號碼,如1234-Bob McDonald。如果它不是那種形式,那麼我想忽略它並移動到下一行。VB.Net使用和操作Excel電子表格

然後我想通過細胞同一行中去細胞,並且無論是在細胞,將其保存到一個不同的變量(列2位置,第3列是工作時數等)

這裏是我到目前爲止的代碼:

Public Function ReadXLFile(ByVal FileName As String) As DataSet 
    Dim MyConnection As System.Data.OleDb.OleDbConnection 
    Dim Ds As System.Data.DataSet 
    Dim MyAdapter As System.Data.OleDb.OleDbDataAdapter 
    MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName & "Extended Properties=Excel 16.0;") 
    MyAdapter = New System.Data.OleDb.OleDbDataAdapter("Select * from [Sheet1$]", MyConnection) 
    Ds = New System.Data.DataSet 
    MyAdapter.Fill(Ds) 
    Return Ds 
End Function 
+1

我猜你怎麼在VB.NET和python中做到這一點並沒有不同,多米諾,它看起來不同。也許你可以將你的Python解決方案添加到你的問題。 –

回答

0

這個怎麼樣?

Public Sub GetData(ByVal FileName As String) 
    Dim strEmployeeNumber As String 
    Dim strEmployeeName As String 
    Dim strLocation As String 
    Dim intHours As Integer 
    Dim myDataSet As DataSet = ReadXLFile(FileName) 
    Dim myFirstCell As String 
    Dim mMatch As Match 
    Dim r As Regex = New Regex("^[0-9]+-[A-Za-z]+") 
    Dim arrFirstCell() As String 
    For Each myDr As DataRow In myDataSet.Tables(0).Rows 
     myFirstCell = myDr.Item(myDataSet.Tables(0).Columns(0)) 
     mMatch = r.Match(myFirstCell) 
     If mMatch.Success Then 
      arrFirstCell = Split(mMatch.Value, "-") 
      strEmployeeNumber = arrFirstCell(0) 
      strEmployeeName = arrFirstCell(1) 
      strLocation = myDr.Item(myDataSet.Tables(0).Columns(1)) 
      intHours = CInt(myDr.Item(myDataSet.Tables(0).Columns(2))) 
      Console.WriteLine("Number: {0} Name: {1} Location: {2} Hours: {3}", strEmployeeNumber, strEmployeeName, strLocation, intHours) 
     End If 
    Next 
End Sub 
+0

太棒了。是否有辦法區分「1234-Abe Lincoln」和「1234」? – yithril

+0

我修改了正則表達式,只匹配' - '後面跟着一個字符的實例。當Option Explicit打開時,我還做了更多的mod來處理非法強制轉換。 – Squidx3