将Word文档中的数据提取到Excel SpreadSheet

时间:2010-08-25 15:17:35

标签: excel-vba word-vba vba excel

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

  1. 使用Excel文件创建一个vba脚本并添加任何word文档引用。
  2. 2使用单词导航到表格“9。 STOCKS ......“(下面提取的示例 - 附录A)并阅读以红色突出显示的柴油(ltrs)日常使用情况。

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

    1. 此值的日期也是关键,但它保存在word文档的另一部分(附录B)。日期也在文件名中,但我们相信内部值多于单词文档名称。利用第3点和第4点的知识,将相关日期提取到相邻的电子表格单元格。
    2. 下面显示的是表格,因为格式化我无法向您发送确切的表格,但我可以发送它的值。

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

      柴油(ltrs)
      390436 的 15012 25000

      氮(mm)
      35 1 19 冠军1033(手提箱)
      15 1 4 Nexguard(锅炉) 4
      0.25 4 x 200 ltrs

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

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

1 个答案:

答案 0 :(得分:7)

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

  1. 打开WORD文档
  2. 搜索字符串“minimum stock”
  3. 将光标移动一些行/单词
  4. 展开/选择WORD光标
  5. 将此WORD选项粘贴到EXCEL
  6. 步骤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出现,但你需要它来调试和播放光标移动。

    后期绑定(并且不使用对Word库的引用)的缺点是单元的硬编码(6 = story,5 = line,2 = word)而不是使用Word枚举,但我有时会在早期遇到OS崩溃绑定....不是很性感,但似乎有效。

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

    我没有包含检查项目是否真正找到的代码;我把它留给你的创造力。

    希望有所帮助。