我有一个需求,每天从word文档中提取一个值并将其写入excel工作簿。我目前手动执行此操作,这对我来说是最有效方法的边界
- 使用 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 开始,它
- 打开 WORD 文档
- 搜索字符串“最小库存”
- 将光标进一步移动一些行/单词
- 展开/选择 WORD 光标
- 将此 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/