4

Python自动合并Word文件同时添加分页符的方法 - 疯狂学习GIS

 1 year ago
source link: https://www.cnblogs.com/fkxxgis/p/17143805.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python自动合并Word文件同时添加分页符的方法

  本文介绍基于Python,实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的方法。

  现有多个Word文档文件,需将其按名称顺序合并为一个新的Word文件,且需保证每一次合并时,都另起一页(即新的Word文件一页中,不能出现两个及以上的原本单个Word文件的内容)。

  一般的,实现多个Word文件的合并,在Word中可以通过“插入”→“文本”→“对象”的方式进行,较为方便。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poZWJ1c2hpYmlhb3NoaWZ1,size_16,color_FFFFFF,t_70

  在弹出的窗口中选择需要合并的Word文件即可。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poZWJ1c2hpYmlhb3NoaWZ1,size_16,color_FFFFFF,t_70

  但是,这种方法工作量较大,且无法满足合并时另起一页的要求。例如,如果原本有两个Word文件,每个文件中都仅有一页,一页中仅在第一行有内容(这里假设是一行数字),则合并后的新Word文件同样为一页,该页中包含两行数字,即无法另起一页合并。

  因此,本文就结合Pythonpython-docxdocx)模块与docxcompose模块,实现本文开头提及的需求。

  首先安装python-docx模块。由于我用的是Anaconda,因此就直接在Anaconda Prompt (Soft)中加以安装。

  打开Anaconda Prompt (Soft)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poZWJ1c2hpYmlhb3NoaWZ1,size_16,color_FFFFFF,t_70

  在弹出的界面中输入:

conda install -c conda-forge python-docx
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poZWJ1c2hpYmlhb3NoaWZ1,size_16,color_FFFFFF,t_70

  输入y,开始安装。

20210608235655254.png

  随后即可安装完成。

20210608235704217.png

  接下来安装docxcompose,还是一样的操作。输入:

pip install docxcompose
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poZWJ1c2hpYmlhb3NoaWZ1,size_16,color_FFFFFF,t_70

  安装完成后,即可开始代码的书写。整体代码如下:

import os
from docx import Document
from docxcompose.composer import Composer

original_docx_path='F:/其他学生工作/2020就业联络员/2021.06派遣材料与调档函/地信1701_就业派遣材料/'
new_docx_path='F:/其他学生工作/2020就业联络员/2021.06派遣材料与调档函/地信1701.docx'

all_word=os.listdir(original_docx_path)
all_file_path=[]
for file_name in all_word:
    all_file_path.append(original_docx_path+file_name)
master=Document(all_file_path[0])
middle_new_docx=Composer(master)
num=0
for word in all_file_path:
    word_document=Document(word)
    word_document.add_page_break()
    if num!=0:
        middle_new_docx.append(word_document)
    num=num+1
middle_new_docx.save(new_docx_path)

  首先,对代码加以初步介绍。original_docx_path为存放需要合并的Word文件路径,new_docx_path为需要合并入其中的Word文件,这里大家直接在目标路径下新建一个Word文件并重命名为需要的文件名即可。

  随后,通过os.listdir获取所有需要合并的Word文件文件名。在这里需要注意,如果需要按照文件名称作为合并顺序,大家直接在资源管理器中调整文件排序方法为名称即可。随后通过.append()逐一将文件名称与其路径合并。

  接下来,设立一个Word文件模板master。其实这个模板就是限定了合并完成后的新Word文件的字体等格式,如果我们不设置模板,就会用docx模块中的默认模板,导致合并后的文件字体与合并前的文件字体不一致(内容是一致的,主要是字体等格式会出问题)。在这里,为了保证合并完成后的新Word文件的字体等格式与合并前文件一致,直接用all_file_path[0](也就是即将要被合并的第一个文件)作为模板即可。其次,将模板用Composer()激活(这里Composer函数个人认为就是激活的作用),从而将其作为模板格式,对多个待合并的文件加以约束。

  最后,由于需要保证每一次合并都另起一页,便用.add_page_break()函数,在每一次合并前将这一待合并的文件末尾增添分页符。同时,由于我们用了第一个待合并文件作为模板,因此后期只需要从第二个文件开始进行合并即可(可以理解为,文件一旦选择为模板,其自动完成了自身的合并)。最后保存文件即可。

  综上,便完成了“按名称顺序合并为一个新的Word文件,且需保证每一次合并时,都另起一页”的需求。但是需要注意,这一方法对于较为复杂的Word文件(例如含有文本框等形式内容的文件)不能实现合并,会报错;对于含有普通文字、图片等的Word文件而言,还是很方便的~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK