【问题标题】:Reading dates in a spreadsheet to and from a DataSet从数据集中读取电子表格中的日期
【发布时间】:2011-03-19 12:33:18
【问题描述】:

我的应用程序使用一个排列不当的 Excel 电子表格作为数据源。我说设计不好,因为除了找到日期和时间的列之外,每一行都没有唯一标识符。

长话短说,我的应用程序使用每一行的日期和时间作为标识符,以从该行的其他列中检索信息。这个想法是,用户将从 ListBox 中选择一个日期/时间,此时应用程序将遍历 DataSet 并在右列中找到日期/时间并在该行中显示其余信息。

我的问题是 ListBox 控件没有被填充,我不明白为什么......

这是电子表格中的示例行:(每个 | 字符代表一个单元格边框)

Team - FNB | O | 2010/02/18 08:59:24 | 5034 | Frederico Turnbridge | 27839963586 | SA - MOBILE - (ZA) | | 69 | O_NORMAL | | 00:01:06 |R 2.83

这是我的代码:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim j As Integer = 0
    If TextBox1.Text.Length = 4 Then
        For i As Integer = 0 To CallData.Tables(0).Rows.Count - 1
            If CallData.Tables(0).Rows(i)(3).ToString = TextBox1.Text _
            And CallData.Tables(0).Rows(i)(2).ToString > DateTimePicker1.ToString _
            And CallData.Tables(0).Rows(i)(2).ToString < DateTimePicker2.ToString Then
                ListBox1.BeginUpdate()
                ListBox1.Items.Add(CallData.Tables(0).Rows(i)(2).ToString)
                ListBox1.EndUpdate()
                j = j + 1
            End If
        Next

        Label1.Text = j & " records found."
    End If
End Sub

这基本上适用于用户将指定要搜索的术语(无论是电话号码还是(在本例中)电话分机)和日期范围的搜索。 现在,我知道电子表格(以及数据集)包含日期列(列索引 2)在我指定的日期范围内的信息,并且之后的列包含我的搜索词,但我我没有得到任何结果。

有什么想法吗?

【问题讨论】:

  • 你真的试过MsgBox(CallData.Tables(0).Rows(i)(2).ToString)吗?
  • 马克,不,我没有尝试过 MsgBox,而是在值上设置了手表

标签: vb.net excel dataset


【解决方案1】:

好的,这里有严重的新手错误。

我回去尝试MsgBox(DateTimePicker1.ToString),结果不是我想的那样。

我应该做的是:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim j As Integer = 0
    If TextBox1.Text.Length = 4 Then
        For i As Integer = 0 To CallData.Tables(0).Rows.Count - 1
            If CallData.Tables(0).Rows(i)(3).ToString = TextBox1.Text _
            And CallData.Tables(0).Rows(i)(2).ToString > DateTimePicker1.Value.ToString _
            And CallData.Tables(0).Rows(i)(2).ToString < DateTimePicker2.Value.ToString Then
                ListBox1.BeginUpdate()
                ListBox1.Items.Add(CallData.Tables(0).Rows(i)(2).ToString)
                ListBox1.EndUpdate()
                j = j + 1
            End If
        Next

        Label1.Text = j & " records found."
    End If
End Sub

DateTimePicker1.ToString 更改为DateTimePicker1.Value.ToString 即可解决问题。

【讨论】:

    【解决方案2】:

    问题可能在于您的日期比较。

    CallData.Tables(0).Rows(i)(2).ToString > DateTimePicker1.ToString
    

    此代码比较两个字符串值,而不是两个日期。如果格式不是 yyyy/mm/dd,则比较不会得到想要的结果。

    除了比较问题,我建议使用ADO.NET 从 Excel 文件中检索数据,而不是您当前的方法。

    【讨论】:

    • 让我感到困惑的是,直到一两天前,它都以我的方式运行良好。实际上,我的笔记本电脑上有一个示例(不幸的是,我没有),它有工作代码,但除非我对我在这里没有看到的实现做了一些非常愚蠢的事情,否则代码应该是相同的......
    • 我目前正在使用 ADO.NET 将电子表格中的信息读入 CallData
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多