excel-vba – 将Word文档中的数据提取到Excel SpreadSheet

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

>使用Excel文件创建vba脚本并添加任何word文档引用.

2使用单词导航到表“9.股票……“(下面提取的例子 – 附录A)并读取以红色突出显示的柴油(ltrs)日常使用情况.

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

>此值的日期也是关键,但它保存在word文档的另一部分(附录B).日期也在文件名中,但我们信任内部值多于单词文档名称.利用第3点和第4点的知识,将相关日期提取到相邻的电子表格单元格.

该表格显示如下,因为格式化我无法向您发送确切的表格,但我可以发送它的值.

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

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

最佳答案
这里是一些使用后期绑定的代码(声明对象而不是word.application等).从Excel 2003开始吧

>打开WORD文档
>搜索字符串“最小库存”
>进一步移动光标一些行/单词
>展开/选择WORD光标
>将此WORD选项粘贴到EXCEL中

对于“报告期间:”重复步骤2-5(注意“:”是单词边界,因此我们需要向右跳8个字以到达日期)

对于WORD,我按原样复制了Q中的文本(没有表格,只有纯文本).如果使用表格,则可能需要使用各种Move语句的单位(例如,对于单元格单位:= 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中的标准,但最好检查而不是崩溃.

而且我没有包含代码来检查是否真的找到了这些物品;我把它留给你的创造力.

希望有所帮助.

转载注明原文:excel-vba – 将Word文档中的数据提取到Excel SpreadSheet - 代码日志