excel - 将 Word 文档中的数据提取到 Excel 电子表格

标签 excel vba ms-word

我有一个需求,每天从word文档中提取一个值并将其写入excel工作簿。我目前手动执行此操作,这对我来说是最有效方法的边界

  1. 使用 Excel 文件创建 VBA 脚本并添加任何 Word 文档引用。

2 使用单词导航到表“9.股票...”(摘录示例如下 - 附录 A)并阅读以红色突出显示的柴油 (ltrs) 每日使用量。

3.将此值写入电子表格单元格。

  • 该值的日期也很关键,但它保存在 Word 文档的另一部分(附录 B)。日期也包含在文件名中,但我们更信任内部值而不是单词文档名称。借助第 3 点和第 4 点的知识,将关联的日期提取到相邻的电子表格单元格中。
  • 该表格如下所示,由于格式原因,我无法向您发送确切的表格,但我可以发送它的值。

    9.STOCKS(截至报告发布日 00:01)。 持有股票 日常使用 最低库存

    柴油(升)
    390436 15012 25000

    氮气(毫米)
    35 1 19 Champion 1033(手提包)
    15 1 4 Nexguard(锅炉) 4
    0.25 4 x 200 升

    附录 B: 比阿特丽斯报告期: 2010年8月10日 00:01 – 24:00

    如果您对我的问题有任何疑问,请回复我,我感谢您的努力并提前致谢

    最佳答案

    这里有一些使用后期绑定(bind)的代码(声明对象而不是 word.application 等)。从 Excel 2003 开始,它

    1. 打开 WORD 文档
    2. 搜索字符串“最小库存”
    3. 将光标进一步移动一些行/单词
    4. 展开/选择 WORD 光标
    5. 将此 WORD 选择内容粘贴到 EXCEL 中

    对“报告期间:”重复步骤2-5(请注意,“:”是单词边界,因此我们需要向右跳8个单词才能得出日期)

    对于 WORD,我按原样复制了您 Q 中的文本(没有表格,只是纯文本)。如果您使用表格,则可能需要使用各种 Move 语句的单位(例如,对于单元格 unit:=12);策略保持不变:找到恒定文本,将光标移动到最终目的地,扩大选择范围,创建单词范围并转移。

    这两个项目都被放置到 Excel 中的当前单元格及其右邻居中。

    Sub GrabUsage()
    Dim FName As String, FD As FileDialog
    Dim WApp As Object, WDoc As Object, WDR As Object
    Dim ExR As Range
    
        Set ExR = Selection ' current location in Excel Sheet
    
        'let's select the WORD doc
        Set FD = Application.FileDialog(msoFileDialogOpen)
        FD.Show
        If FD.SelectedItems.Count <> 0 Then
            FName = FD.SelectedItems(1)
        Else
            Exit Sub
        End If
    
        ' open Word application and load doc
        Set WApp = CreateObject("Word.Application")
        ' WApp.Visible = True
        Set WDoc = WApp.Documents.Open(FName)
    
        ' go home and search
        WApp.Selection.HomeKey Unit:=6
        WApp.Selection.Find.ClearFormatting
        WApp.Selection.Find.Execute "Minimum Stock"
    
        ' move cursor from find to final data item
        WApp.Selection.MoveDown Unit:=5, Count:=1
        WApp.Selection.MoveRight Unit:=2, Count:=2
    
        ' the miracle happens here
        WApp.Selection.MoveRight Unit:=2, Count:=1, Extend:=1
    
        ' grab and put into excel        
        Set WDR = WApp.Selection
        ExR(1, 1) = WDR ' place at Excel cursor
    
        'repeat
        WApp.Selection.HomeKey Unit:=6
        WApp.Selection.Find.ClearFormatting
        WApp.Selection.Find.Execute "Period of Report:"
        WApp.Selection.MoveRight Unit:=2, Count:=8
        WApp.Selection.MoveRight Unit:=2, Count:=3, Extend:=1
    
        Set WDR = WApp.Selection
        ExR(1, 2) = WDR ' place in cell right of Excel cursor
    
        WDoc.Close
        WApp.Quit
    
    End Sub
    

    您可以创建一个按钮并从那里调用该子按钮,或者将 GrabUsage() 链接到功能键。

    我注释掉了 WApp.Visible = True 因为在生产中您甚至不希望 WORD 显示,但您需要它来调试和玩光标移动。

    后期绑定(bind)(并且不使用对 Word 库的引用)的缺点是单元的硬编码(6=故事、5=行、2=单词)而不是使用 Word 枚举,但我有时会因早期绑定(bind)而导致操作系统崩溃绑定(bind)......不是很性感,但似乎有效。

    FileDialog 对象需要对 MS Office Office 库的引用。 AFAIK 这是 Excel 2003 中的标准,但最好检查一下而不是崩溃。

    而且我没有包含代码来检查是否确实找到了这些项目;我把这个留给你的创造力。

    希望有帮助。

    关于excel - 将 Word 文档中的数据提取到 Excel 电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567441/

    相关文章:

    c# - 尝试使用 NPOI 创建一个新的 .xlsx 文件并写入

    java - 如何使用java将工作表添加到现有的大型Excel文件(20MB)?

    VBA 编辑器提示缺少对象

    excel - 数字签名 VBA 代码的信任链未按预期工作

    vba - 将一系列单元格复制到通过单元格命名的多个工作表中

    c# - 由 C# 创建的 Word 文档中的表格和单元格 - 如何仅更改一个边框的颜色?

    ms-word - 为 Word 2013 OpenXML 元素分配自定义唯一 ID

    Excel VBA 宏后期绑定(bind)

    excel - 将数据从一个工作簿复制到另一个工作簿

    Python-excel : writing to multiple cells takes time