excel与word数据交互的需求很常见,例如,利用excel明细生成word合同、利用excel明细生成word报告单、批量提取word数据到excel表格等等。
通常情况下大家都是手动复制粘贴。但是其实可以用程序去简化这一部分工作。
在做开发过程中,遇到过很多案例,在此总结出来。
一、什么是VBA?
首先我们来介绍下VBA。
VBA是一种编程语言,它依托于Office软件,不能独立的运行,通过VBA可以实现各种Office软件操作的自动化。在这里我们就以VBA为中间语言去实现excel与word的数据交互。
二、交互的初级代码
2.1 通过VBA打开word
代码作用:创建word程序对象,把当前表格里面的数据按行写入word文档,并且保存为例子.docx。
Sub 方法1()
Set doc = CreateObject("word.application")
doc.Visible = True
Set wd = doc.documents.Add
rrow = ThisWorkbook.Worksheets(1).Range("a65536").End(3).Row
For i = 2 To rrow
wd.Paragraphs.Add
wd.Paragraphs(i).Range.Text = ThisWorkbook.Worksheets(1).Cells(i, 3).Value
' Selection.Range.ListFormat.ListString'光标当前所在段落
Next
wd.SaveAs ThisWorkbook.Path & "\例子.docx"
End Sub
这里我们用的是后期绑定。
2.2 前期绑定和后期绑定区别
前期绑定需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以实时看到 word 对象引用的方法属性等提示。
后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。 对于后绑定来说,优点是不需要设置引用对话框,缺点是编码时不会有提示。
两者各有优缺点,看自己编程习惯选择即可。
三、具体案例
按规则提取word数据
Sub test()
Dim wdapp As Word.Application
Set wdapp = New Word.Application
wdapp.Documents.Open ThisWorkbook.Path & "\DEMO\9-5.demo.docx"
With wdapp
c = .Documents(1).Range
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "\d+、\S+。"
Set Mat = .Execute(c)
For Each m In Mat
n = n + 1
Cells(n, 1) = m.Value
Next
End With
End With
wdapp.Quit
End Sub