系列文章目录
python学习—合并TXT文本文件
python学习—统计嵌套文件夹内的文件数量并建立索引表格
python学习—查找指定目录下的指定类型文件
python学习—年会不能停,游戏抽签抽奖
python学习—循环语句-控制流
python学习—合并多个Excel工作簿表格文件
python学习—批量复制并重命名文件夹
python学习—详解word邮件合并
python学习—合并多个word文档
文章目录
功能说明
前面研究了使用python编程实现合并多个word文档的方法,详见我的文章《python学习—合并多个word文档》,很多朋友反应没有python环境,使用起来不方便。
这回换一种word程序自带的功能——VBA宏,采用宏代码编程方法实现多个word文档的合并。
本代码目标为:
- 1 编辑宏;
- 2 运行宏;
- 3 完成word合并。
- 软件环境: Microsoft Office 2016专业增强版
温馨提示:如果觉得文章不错,请多多点赞添加关注,您的支持就是我的动力。
1 准备工作
首先准备几个word文档,我准备的还是 征地补偿登记表 ,如下图所示。每个文档的格式一样,目标是把多个单页文档合并成一个word多页文档。
2 编辑宏,运行宏
知识点: 关于Word 中的宏代码:
- 定义与用途
宏是一种能够将多个 Word 操作组合起来的工具。借助录制宏或者直接编写代码,你能够让 Word 自动执行一连串操作,像格式设置、文本替换、文档生成等。 - 创建方式一 录制宏:此为最简单的方法。你可以在 Word 里找到 “开发工具”或者 “视图” 选项卡(office的版本不同,位置有差异),接着点击 “宏——录制宏”,随后执行所需操作,最后停止录制。Word 会自动生成对应的宏代码。
- 创建方式二 编写宏代码:使用 VBA(Visual Basic for Applications),直接编写宏代码。在 打开的word界面,按快捷键“Alt + F11“,就能快速打开 VBA 编辑器编写代码。
- 运行宏:录制或编写好宏之后,可以通过 点击 选项卡中的 “宏” 按钮来运行宏,也能为宏指定快捷键,方便快速执行。
(1) 创建宏
本文使用VBA编写宏代码,按快捷键“Alt + F11“,快速打开 VBA 编辑器,把下面的代码复制粘贴到编辑器,关闭即可完成编写代码。
Sub MergeDocuments()
Dim MyPath As String
Dim MyName As String
MyPath = "D:\文档合并\分户\" '替换为实际的分文档所在路径
MyName = Dir(MyPath & "*.docx") '根据实际文档类型修改扩展名
Do While MyName <> ""
If MyName <> ThisDocument.Name Then
Documents.Open MyPath & MyName
Selection.WholeStory
Selection.Copy
ThisDocument.Activate
Selection.EndKey wdStory
Selection.Paste
ActiveDocument.Save
Documents(MyName).Close
End If
MyName = Dir
Loop
End Sub
操作步骤如下:
知识点: 宏的位置
在编辑宏代码的时候,从下 图2 可见,可以选择在 word对象 中编辑,也可以选择插入 模块 中编辑,两者有区别。
- Word 对象:Word 应用程序里的各种元素都属于对象,像文档(Document)、段落(Paragraph)、句子(Sentence)、单词(Word)等。这些对象拥有各自的属性和方法,可以借助 VBA 代码来操控它们,进而实现自动化操作。例如,你可以修改文档的标题、设置段落格式等。
- 通常不会直接存储代码,不过能针对对象的事件编写代码。
- 事件过程一般是针对特定对象的,作用域仅限于该对象。例如,文档的打开事件只在该文档打开时触发,对其他文档没有影响。
- 主要是通过引用对象的属性和方法来实现特定的功能。
- 模块:模块是 VBA 代码的容器,它能够存放一系列的过程(子程序和函数)。可以把相关的代码组织在一个模块里,从而方便管理和复用。模块就像是一个工具箱,里面有很多工具(过程),你可以在需要的时候调用这些工具来完成特定的任务。
- 主要用于存储通用的过程,这些过程可以在不同的对象事件或者其他模块中被调用。
- 模块中的过程具有更广泛的作用域。如果过程被声明为 Public,那么它可以在整个项目中的任何地方被调用;如果声明为 Private,则只能在同一个模块内被调用。
- 在需要使用模块中的过程时,直接调用过程名即可。例如,调用上面定义的 MergeDocuments 函数。
综上所述,Word 对象是操作的目标,而模块是代码的组织和存储单元。它们相互配合,能在 Word 中实现复杂的自动化任务。
(2) 代码解析
1.宏名称:
本次宏的名称为 MergeDocuments,宏名称支持中文,直接修改为中文即可,其他代码不表:
Sub 合并文档()
......
End Sub
2.宏变量:
代码中有两个变量,需要根据自己的目录进行修改:
- 路径设置 MyPath: 这是分文档所在的目录路径,根据自己的目录修改存放 word文档的目录。
获取文档名称: - 获取文档名称 MyName = Dir(MyPath & “*.docx”):word文件的后缀名 .docx名称,根据需要修改。
3.代码解析:
之后的代码是一个循环处理过程,
- Do While MyName <> “”:循环处理路径下的所有.docx文件。
- If MyName <> ThisDocument.Name Then:确保不处理当前活动文档。
- Documents.Open MyPath & MyName:打开当前处理的文档。
- Selection.WholeStory:选择整个文档内容。
- Selection.Copy:复制选中的内容。
- ThisDocument.Activate:激活当前活动文档。
- Selection.EndKey wdStory:将光标移动到文档末尾。
- Selection.Paste:粘贴复制的内容。
- ActiveDocument.Save:保存当前活动文档。
- Documents(MyName).Close:关闭已处理的文档。
- MyName = Dir:获取下一个文档的名称。
- 当所有文档处理完毕后,循环结束。
(3) 运行宏
宏的运行方式:通过选项卡找到:宏——查看宏——运行,即可。如下:
(4) 调整完善
通过查看合并后的文档效果,可以看到上下页出现串页的问题,合并的效果跟python编写的代码运行效果一致,因为本质使用的思路都是:复制内容——粘贴内容。
可以通过调整页面布局的上下页边距,调整完善串页的问题。如下:
4 后记
通过以上代码,可以在word软件中实现合并多个文档的功能 。
举一反三,可以扩展代码的功能,比如说,合并多个txt文档,直接把文件后缀名修改一下即可,详见 文章 图2 :
Sub 合并txt文档()
。。。
MyName = Dir(MyPath & "*.txt") '根据实际文档类型修改扩展名
。。。
End Sub
下图是运行合并txt的效果图,我合并了3个txt文档内容到一个word文档中。
此外,还可以把 某个 宏代码 直接保存到 word的共用模板中,如下图
这样一来,每当新建一个word文档,就自动加载了你创建的 宏,不用再编写宏代码了。
如上图我创建了一个名为 setpicsize的宏(作用是一键设置word中所有图片为统一尺寸),但是不推荐这样操作,因为这样的文档另存到其他人的电脑,杀毒软件有可能会报 宏病毒。
如果觉得文章不错,请多多点赞添加关注,您的支持就是我的动力。