【问题标题】:Clipboard data sort in VB.NETVB.NET中的剪贴板数据排序
【发布时间】:2020-02-18 00:07:15
【问题描述】:

我有一个表单,我需要将剪贴板中的文本排序到适当的字段中。本质上,我复制客户电子邮件,单击表单上的按钮,它会读取数据并将信息放入字段中。有几个字段,例如客户姓名、公司名称、电话号码、他们是否有支持计划。

所有电子邮件都以相同的方式格式化(除了我无法控制的随机空间)并由多个员工使用:

公司:TEST LTD

客户姓名:乔·约翰逊

部门:IT 运营经理

客户电话:012345678910

客户邮箱:JOE.JOHNSON@TEST.COM

工具:SUP

序列号:EM2PC2938C

覆盖范围:无保修计划

所以,我的问题是:

我需要能够直接从电子邮件中复制此文本,单击将浏览剪贴板中文本的按钮,并将不同的信息放入标记为与电子邮件中相同的不同文本框中,但没有标识符(例如“Email:”或“Coverage”),所以基本上冒号后的任何内容都会进入文本框。

我有一些代码来获取数据并放入我计划用来对数据进行排序的富文本框中(我知道我可以直接从代码中完成,但不知道如何)

rtbx_ClipboardData.text = Clipboard.GetText

还有一些代码可以删除冒号前的任何文本:

tbx_Data_Company.Text = rtbx_ClipboardData.Text.Substring(rtbx_ClipboardData.Text.IndexOf(":") + 1)

此代码有效,但我需要执行多次并将数据放入我正在努力的适当字段中。

如果有人可以提出任何建议/提供一些示例代码,我将不胜感激。

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    我会使用String.Split,而不是.Substring.IndexOf

    从剪贴板中获取字符串并将其拆分为删除任何空行的行。取结果数组的每个元素(一行)并用冒号分割。我们希望这个数组的第二个元素 (1) 修剪掉任何前导或尾随空格并分配给适当的文本框。然后重复每一行。

    Private Sub GetFieldsFromEmail()
        Dim eText As String = Clipboard.GetText()
        Dim lines = eText.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
        txtCompany.Text = lines(0).Split(":"c)(1).Trim
        txtName.Text = lines(1).Split(":"c)(1).Trim
        txtDepartment.Text = lines(2).Split(":"c)(1).Trim
        txtPhone.Text = lines(3).Split(":"c)(1).Trim
        txtEmail.Text = lines(4).Split(":"c)(1).Trim
        txtInstrument.Text = lines(5).Split(":"c)(1).Trim
        txtSerNum.Text = lines(6).Split(":"c)(1).Trim
        txtCoverage.Text = lines(7).Split(":"c)(1).Trim
    End Sub
    

    编辑

    如果前后有随机文字...

    Private Sub GetFieldsFromEmail()
        Dim eText As String = Clipboard.GetText()
        Dim lines = eText.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
        Dim StartLine As Integer
        For i = 0 To lines.Count - 1
            If lines(i).StartsWith("Company") Then
                StartLine = i
                Exit For
            End If
        Next
        TextBox18.Text = lines(StartLine).Split(":"c)(1).Trim
        TextBox19.Text = lines(StartLine + 1).Split(":"c)(1).Trim
        TextBox20.Text = lines(StartLine + 2).Split(":"c)(1).Trim
        TextBox21.Text = lines(StartLine + 3).Split(":"c)(1).Trim
        TextBox22.Text = lines(StartLine + 4).Split(":"c)(1).Trim
        TextBox23.Text = lines(StartLine + 5).Split(":"c)(1).Trim
        TextBox24.Text = lines(StartLine + 6).Split(":"c)(1).Trim
        TextBox25.Text = lines(StartLine + 7).Split(":"c)(1).Trim
    End Sub
    

    我刚刚添加了一个 For 循环来查找从何处开始读取数据。通过直接从问题中复制数据前后的几段来进行测试。我更改了文本框的名称以匹配可用的内容。

    【讨论】:

    • 有效,但它不会事先检查文本并将其放入正确的字段中。电子邮件的布局大致相同,但是在此文本之前和之后都有文本,并且在其中粘贴电子邮件时只是查找冒号,而不是诸如“公司:”之类的信息。如果您能帮忙添加它,那就太好了。
    • @JoshF98 我拥有的唯一信息是您的问题。我从您的问题中复制了文本,所有内容都进入了正确的字段。如果您的要求与您显示的不同,请在您的问题中包含正确的示例数据。
    • 客户/员工通常会在电子邮件之前放置一些文本,例如成绩单。如果我把这弄糊涂了,我很抱歉。我试过你的代码,但它什么也没做,可能是什么原因?不报错,但是不把文字放到文本框中?
    • 你确定剪贴板上有东西吗?在Dim eText As String = Clipboard.GetText()Debug.Print(eText) 之后添加一行。运行程序后检查您的即时窗口。
    • 仍然没有喜悦。没发生什么事。调试窗口显示了我在剪贴板中的数据,并且信息正确。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多