【问题标题】:VB.Net Working with and Manipulating an Excel SpreadsheetVB.Net 使用和操作 Excel 电子表格
【发布时间】:2017-08-17 14:13:52
【问题描述】:

我想遍历数据集中的一行。如果该行的第一个单元格是模式1234-Name,那么我想从中删除数字(1234)并将其保存为变量。基本上,第一个单元格是员工及其号码,例如1234-Bob McDonald。如果它不是那种形式,那么我想忽略它并移至下一行。

然后我想在同一行中逐个单元格,将单元格中的任何内容保存到不同的变量(第 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

【问题讨论】:

  • 我猜你在 VB.NET 和 python 中的操作方式并没有什么不同,只是看起来不同。也许您可以将您的 python 解决方案添加到您的问题中。

标签: excel vb.net


【解决方案1】:

这个怎么样?

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

【讨论】:

  • 太棒了。有没有办法区分“1234-Abe Lincoln”和“1234”?
  • 我修改了正则表达式以仅匹配“-”后跟字符的实例。当 Option Explicit 开启时,我还制作了更多的 mod 来处理非法强制转换。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多