【问题标题】:Using VBA Regex on the entire contents of a word document对 word 文档的全部内容使用 VBA 正则表达式
【发布时间】:2013-11-11 20:50:32
【问题描述】:

首要问题:如何访问 RTF 文件的整个文本

好的,所以我在这里有点问题,我希望我想要的不是完全疯狂,但它就是这样。

我从事汽车工作,每天结束时,我们都会汇总我们发现的损坏车辆的 RTF,然后将它们发送给某人。我们还必须保留一个 Excel 文件,其中包含这些 VIN 号码和相应的损坏情况。我在 VIN Log 部分做了一些工作,使用 VBA 以某些方式格式化某些值。 RTF 文件类似于以下格式(这些不是真正的 VIN,但与它们的正则表达式匹配)

1FTEX8EEG12356789 //Other random Information I do not need
    004121 2
    012051 3
    005091
1FTFW7D78KF123567 //Other Random Information I do not need
    042071
    010341 4
    010341 9
//ETC

这是我的问题:我已经弄清楚如何打开 RTF 文件,但是如何同时访问整个文档文本,而不仅仅是逐段,并且 RegExp 对象是否有可用的如何捕获找到字符串的偏移量?

我尝试使用 RegEx 的原因是因为有这个标题,它每页占用大约 10 个“段落”的空间(这些文档可以是 1 页,有时是 10 页或更多)。如果有人能指出我更快的方法来实现这一点,我将不胜感激。

我在想我最终不得不做的事情,一旦我弄清楚如何使用 RegEx 搜索整个文档就是这样

  1. 收集 ([A-Z0-9]{17}) 的所有 RegExp 匹配项
  2. 使用第 1 步中的匹配项通过 InStr 找出文档中的位置
  3. 使用第 2 步中的值循环遍历第 1 步中的每组匹配项,以及第 2 步中的索引,以形成类似于以下代码的内容。

代码:

For i=1 To RegMatches.Count 
  start_pos = InStr(WordDocumentText,RegMatches.Item(i))
  For j=start_pos To InStr(WordDocumentText,RegMatches.Item(i+1))
    //Code to gather damages on VIN 'i'
  Next
Next

但这些似乎......多余,只是一种混乱的方式。

我真正需要知道的是如何访问我用 VBA 打开的 RTF 文件中的全部文本,我可以从那里开始,但如果有人对如何从这里开始,我将不胜感激。

【问题讨论】:

  • 您宁愿以错误的方式进行操作 - 您应该将信息保存在 Excel 文件中,然后将其导出为 RTF。您是否尝试过将文档导入 excel 文件并进行下一步处理?
  • 我们使用的程序确实允许我们将其导出为 CSV,但是我遇到的问题是如何存储损坏 - 假设车辆上有超过 7 个损坏(这种情况很少见,但它确实发生了),那么具有我使用的 VIN 信息的行只会以某种奇怪的模式添加列。然后我需要使用找出每一行中的最后一列,然后必须向后计算每个损坏代码的结束位置,因为最后一列类似于我提供的第一个“VIN”的第一个损坏中的 2 或第一个损坏中的 1,第二个“VIN”。
  • 在我看来,在 CSV 文件而不是 RTF 文件中搜索信息会更好。对于 CSV,您可以使用一些简单的 VBA 函数,例如 Open, Read, Like, InStr, Split 等。对于 RTF,我建议使用 Excel-Word-Interop,然后使用 Word.Find object 来获得您需要的东西。然而,这是一项艰巨的工作。那么,您的 CSV 文件是什么样的?
  • 前几列被命名或标有标题,所以我可以找到车辆上第一个列出的损坏,但问题是原始损坏之后的每个损坏只是附加了 3 列左右第一次伤害。因此,如果第一个损坏位于 W、X、Y、Z 列中,则第二个损坏位于 AA、AB、AC、AD 列中,第三个损坏位于 AH、AI、AJ、AK 列中,第四个将从那里开始 3,并且那么这一切的曲线球将是如果损坏没有网格编号(最后一个数字),那么只有 3 列会有数据,所以我必须向后阅读,这对我来说似乎很复杂。

标签: regex vba excel ms-word


【解决方案1】:

我喜欢在后台使用 MSWord 将 RTF 文件读入 Excel。以下是如何访问 RTF 文档的整个文本。

Sub readRTF()
    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Dim FileName As String
    Dim strFolder As String
    Dim strInput As String

    strFolder = Application.ActiveWorkbook.Path & "\"
    FileName = "VINreport.rtf"

    'open a Word instance
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = False

    Set wrdDoc = wrdApp.Documents.Open(strFolder & FileName)

    'Read RTF file text into variable
    strInput = wrdDoc.Range.Text

    'Print All Text into Immediate Window
    Debug.Print strInput

    'Clean Up
    wrdDoc.Close 0
    Set wrdDoc = Nothing

    wrdApp.Quit
    Set wrdApp = Nothing
End Sub

我的示例 RTF 文件与 excel 文件位于同一文件夹中,是从上面的示例代码中直接剪切和粘贴的。

结果:


现在您可以针对strInput 中的文本运行所需的任何正则表达式。如果您需要有关 Regex 部分的帮助,请查看this link,了解一些在 Excel 中使用 Regex 的有用提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2011-10-17
    • 2017-06-02
    • 2019-01-25
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多