广告
返回顶部
首页 > 资讯 > 后端开发 > Python >用python将word文档合并实例代码
  • 874
分享到

用python将word文档合并实例代码

2024-04-02 19:04:59 874人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录背景:设计思路:脚本环境说明:完整代码:功能执行效果图:总结:背景:         由于工作需要,现在有这么一个需求,要合并大量的Word文档,而且要在不同的目录下找到同一个人

背景:

        由于工作需要,现在有这么一个需求,要合并大量的Word文档,而且要在不同的目录下找到同一个人的word文档,进行合并,最终输出一个合并后的word文档。一般来说几个或者十几个量不多的话,就手工合并一下好了,但现在这个量是真的大。目录有十多个,每个目录又有50多个不同人的word文档,而且同一个人在不同目录下又不一定都有word文档,因此,整个合并工作就出现了人工操作的困难:

工作量多;容易疏漏犯错。

 为此,利用python进行高效准确的执行这类工作,尤为凸显现代自动化办公的能力。因此,我写了这个Python脚本,作为一个小工具来辅助我的工作需求。

设计思路:

        首先,整个脚本实现两个功能:

查看各目录下未提交word文档的名单合并各目录下的word文档查看各目录未提交名单:

        对于这个需求,首先是读一个写有所有人姓名等信息的excel文件,有格式要求。然后通过遍历Excel的信息,获取到所有人的姓名。遍历各目录下,是否有对应姓名的文件存在,如果没有,则输出没有提交文件的姓名。

合并word文件:

        合并word文件和上一个需求有类似的地方。首先我们都需要读Excel文件,得到姓名信息,然后在各目录下获取到这个人所提交的所有word文件的文件路径,然后通过合并word的操作实现文件合并,合并后最终输出到指定的目录下。

脚本环境说明:

        脚本对第三方包有依赖,执行前必须先安装对应的第三方包


pip install python-docx pywin32 xlrd

        首先,目录结构必须是如下图所示,所有需要遍历的目录名称都必须是【实训+数字】,因为脚本中涉及多处正则匹配。

        其次,Excel文件必须遵循下图所示的格式,首行是标题行,遍历的时候会自动跳过,遍历时会遍历C列和D列,其中C列是人员编号,D列是人员姓名

 

        接着,python脚本必须要根目录下

        最后,执行脚本的时候,必须带有传参,传递的参数就是那个Excel表


Microsoft windows [版本 10.0.19043.1415]
(c) Microsoft Corporation。保留所有权利。
 
C:\Windows\system32>python tools.py 花名册.xlsx

完整代码:


#! /usr/bin env python
# -*- coding:utf-8 -*-
 
"""
============================
======Power By python3======
====== Author Task138 ======
============================
"""
 
import sys
import xlrd, os, re
from docx import Document
from docxcompose.composer import Composer
from win32com import client as wc
 
 
# 读Excel表获取学生的学号和姓名
def read_excel(excel_file):
    workbook = xlrd.open_workbook(excel_file)
    sheet = workbook.sheet_by_index(0)
    name_list = []
    name_dict = []
 
    Sno_list = sheet.col_values(2)[1::]
    Sname_list = sheet.col_values(3)[1::]
    for i in range(len(Sno_list)):
        try:
            Sno = str(int(Sno_list[i]))
        except:
            Sno = Sno_list[i]
        dict = {}
        dict['Sno'] = Sno
        dict['Sname'] = Sname_list[i]
        name_list.append(Sname_list[i])
        name_dict.append(dict)
 
    return name_list, name_dict
 
# 合并文档
def merge_doc(source_file_path_list,target_file_path):
    #填充分页符号文档
    page_break_doc = Document()
    page_break_doc.add_page_break()
    #定义新文档
    target_doc = Document(source_file_path_list[0])
    target_composer = Composer(target_doc)
    for i in range(len(source_file_path_list)):
        #跳过第一个作为模板的文件
        if i==0:
            continue
        #填充分页符文档
        target_composer.append(page_break_doc)
        #拼接文档内容
        f = source_file_path_list[i]
        target_composer.append(Document(f))
    #保存目标文档
    target_composer.save(target_file_path)
    print('[ %s ]保存成功' % target_file_path)
 
 
if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('缺乏必要的参数,请输入学生Excel表作为参数')
        print('程序终止')
        exit()
 
    excel_file = sys.argv[1]
 
 
    print('请选择需要执行的功能:')
    print('[ 0 ] 查看各实训目录下未提交的学生名单')
    print('[ 1 ] 合并实训文件')
    cmd = input('请选择: ')
 
    while cmd not in ['0','1']:
        print('输入有误,请重新输入,按 Ctrl+C 可退出程序')
        print('请选择需要执行的功能:')
        print('[ 0 ] 查看各实训目录下未提交的学生名单')
        print('[ 1 ] 合并实训文件')
        cmd = input('请选择: ')
 
    try:
        name_list, name_dict = read_excel(excel_file)
    except Exception as e:
        print('Excel读取失败,程序终止,错误如下:')
        print(e)
        print()
        exit()
    else:
        if cmd == '0':
            # 实训目录的数列
            file_list = []
            for i in os.listdir():
                if os.path.isdir(i):
                    if re.match(r'实训\d', i):
                        file_list.append(i)
 
            for i in range(1, len(file_list) + 1):
                dir_name = '实训%s' % i
                # 进入该实训目录
                os.chdir(dir_name)
                file_list = os.listdir()
                submit_list = []
                for x in file_list:
                    for j in name_list:
                        if j in x and j not in submit_list:
                            submit_list.append(j)
                result = list(set(submit_list) ^ set(name_list))
                if result:
                    print(dir_name, result)
                os.chdir('../')
 
        if cmd == '1':
            if not os.path.exists('实训汇总'):
                os.mkdir('实训汇总')
                print('目录[ 实训汇总 ]创建成功')
 
            # 实训目录的数列
            file_list = []
            for i in os.listdir():
                if os.path.isdir(i):
                    if re.match(r'实训\d',i):
                        file_list.append(i)
 
 
            for i in name_dict:
                doc_list = []
                for j in range(1,len(file_list)+1):
                    dir_name = '实训%s' % j
                    # 进入该实训目录
                    os.chdir(dir_name)
 
                    tmp = []
                    for x in os.listdir():
                        # 判断文件尾缀
                        fname,fext = os.path.splitext(x)
                        # 如果是.doc,则转换为.docx
                        if fext == '.doc' and not x.startswith('~$'):
                            w = wc.Dispatch('Word.Application')
                            doc = w.Documents.Open(os.path.abspath(x))
                            doc.SaveAs(os.path.join(os.getcwd(),'%s.docx' % fname), 16)
                            doc.Close()
                            os.remove(x)
                            print('转换文件[ %s ]类型为.docx' % x)
                        elif fext == '.docx':
                            if (i['Sname'] in x) and (len(tmp) == 0):
                                # 只有一个文件
                                tmp.append(x)
                            elif (i['Sname'] in x) and (len(tmp) != 0):
                                # 有多个文件,按照最新的修改时间进行替换
                                tmp_file = tmp.pop()
                                old_file_mtime = os.path.getmtime(tmp_file)
                                new_file_mtime = os.path.getmtime(x)
                                if new_file_mtime > old_file_mtime:
                                    # 新文件比较新,以新的为准
                                    tmp.append(x)
                                else:
                                    # 老文件比较新,以老文件为准
                                    tmp.append(tmp_file)
                        else:
                            # 其它文件类型,直接跳过
                            # print('当前文件[ %s ]类型不是.doc或者.docx,跳过此文件的合并' % os.path.abspath(x))
                            continue
 
                    if tmp:
                        # 如果这次实训有这位同学的文件
                        doc_list.append(os.path.join(dir_name,tmp.pop()))
                    # 返回父目录
                    os.chdir('../')
                if doc_list:
                    # 有内容,进行文档合并
                    try:
                        merge_file_name = i['Sno'] + '-' + i['Sname'] + '-' + '实训汇总' + '.docx'
                        merge_doc(doc_list, './实训汇总/' + merge_file_name)
                    except Exception as e:
                        print()
                        print('[ %s ]学生信息有误,程序中断' % i['Sname'])
                        print(e)
                        print()

功能执行效果图:

总结:

通过python,我们可以很便捷的满足我们的需求,鉴于这个需求似乎是长期性的,所以还是有必要写个小工具来优化一下自己的办公方式,提高自己的业务能力。

到此这篇关于用python将word文档合并实例代码的文章就介绍到这了,更多相关python word文档合并内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 用python将word文档合并实例代码

本文链接: https://www.lsjlt.com/news/160509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用python将word文档合并实例代码
    目录背景:设计思路:脚本环境说明:完整代码:功能执行效果图:总结:背景:         由于工作需要,现在有这么一个需求,要合并大量的word文档,而且要在不同的目录下找到同一个人...
    99+
    2022-11-12
  • 怎么用python将word文档合并
    这篇文章主要为大家展示了“怎么用python将word文档合并”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用python将word文档合并”这篇文章吧。设计思路:   ...
    99+
    2023-06-22
  • Java实现合并word文档的示例代码
    目录说明实现1.首先定义好主文档2.定义需要追加的文档3. 代码实现4. 成果展示说明 在做项目中,遇到了一种情况,需要将一个小word文档的内容插入到一个大word(主文档)中。 ...
    99+
    2022-11-13
    Java合并word文档 Java合并word Java合并文档
  • JAVA读取PDF、WORD文档实例代码
    读取PDF文件jar引用<dependency> <groupid>org.apache.pdfbox</groupid> pdfbox</artifactid> <version...
    99+
    2023-05-31
    java word文档 pdf文档
  • 利用C#实现合并Word文档功能
    目录程序环境通过插入完整文件来合并文档 完整代码效果图通过克隆内容合并文档 完整代码效果图合并Word文档可以快速地将多份编辑好的文档合在一起,避免复制粘贴时遗漏...
    99+
    2022-12-08
    C#合并Word文档 C#合并Word C# 合并 文档
  • Java实现导出Word文档的示例代码
    最近公司做项目,需要导出word或者PDF文档,PDF实现文档已经轻车熟路了,想研究搞一下word文档。经过调研发现了一个好用的开源项目Poi-tl http://deepoove....
    99+
    2023-02-09
    Java导出Word文档 Java导出Word Java Word
  • python一行代码合并了162个Word文件
    目录引言1、上代码2、相关功能引言 周末我和小明又开始了疯狂的考证学习,昨晚通过合法的手段获取了一套学习资料,却遇到了一个问题: 一套完整的资料,被机构拆分成了162个word文件...
    99+
    2023-03-21
    python合并Word文件 python Word
  • 怎么用Python代码实现给Word文档盖章
    这篇文章主要介绍了怎么用Python代码实现给Word文档盖章的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python代码实现给Word文档盖章文章都会有所收获,下面我们一起来看看吧。实现代码:impo...
    99+
    2023-06-29
  • 怎么用C#实现合并Word文档功能
    本文小编为大家详细介绍“怎么用C#实现合并Word文档功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用C#实现合并Word文档功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。程序环境本次测试时,在程序...
    99+
    2023-07-04
  • Java实现PDF转为Word文档的示例代码
    目录代码编译环境将 PDF 转换为固定布局的 Doc/Docx 文档完整代码将 PDF 转换为流动形态的 Doc/Docx 文档完整代码效果图众所周知,PDF文档除了具有较强稳定性和...
    99+
    2023-01-28
    Java实现PDF转Word Java PDF转Word Java PDF Word
  • 怎么用一行python代码合并162个Word文件
    这篇文章主要介绍“怎么用一行python代码合并162个Word文件”,在日常操作中,相信很多人在怎么用一行python代码合并162个Word文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用一行py...
    99+
    2023-07-05
  • 利用Java Apache POI 生成Word文档示例代码
    最近公司做的项目需要实现导出Word文档的功能,网上关于POI生成Word文档的例子很少,找了半天才在官网里找到个Demo,有了Demo一切就好办了。 package org.apache.poi.xwpf.usermodel; impo...
    99+
    2023-05-31
    apache poi word
  • 几行代码,轻松教你用Java 将 Word 文档转换为 HTML
    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格...
    99+
    2023-09-01
    java word html aspose.words 文档开发
  • spring boot实现自动输出word文档功能的实例代码
    spring boot实现自动输出word文档功能 本文用到Apache POI组件 组件依赖在pom.xml文件中添加 <dependency> ...
    99+
    2022-11-12
  • 基于pdf2docx模块Python实现批量将PDF转Word文档的完整代码教程
    PDF文件是一种常见的文档格式,但是在编辑和修改时不太方便,因为PDF本质上是一种静态的文档格式。 因此,有时候我们需要将PDF文件转换成Word格式,以便更好地编辑和修改文档。在本...
    99+
    2023-05-15
    pdf2docx模块 Python PDF Python PDF转Word
  • Python+OCR实现文档解析的示例代码
    目录介绍环境设置检测提取介绍 文档解析涉及检查文档中的数据并提取有用的信息。它可以通过自动化减少了大量的手工工作。一种流行的解析策略是将文档转换为图像并使用计算机视觉进行识别。而文档...
    99+
    2022-11-11
  • 使用SQL将多行记录合并成一行实例代码
    目录前言1、数据处理前2,结果数据展示3,hive处理方式4,mysql处理方式总结前言 我们在数据开发的过程中,经常会遇到这样的需求,就是将多行合并为一行,并且用特定字符隔开。 1、数据处理前 2,结果数据展示 3...
    99+
    2022-09-13
  • 教你用Python代码实现合并excel文件
    目录一、安装模块二、XlsxWriter 示例三、合并Excel数据四、表头都一样的 excel五、表头都不一样的 excel六、合并后的结果一、安装模块 1、找到对应的模块 htt...
    99+
    2022-11-12
  • 基于pdf2docx模块怎么用Python实现批量将PDF转Word文档
    这篇“基于pdf2docx模块怎么用Python实现批量将PDF转Word文档”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2023-07-06
  • 如何利用Python代码批量将PDF文件转为Word格式
    本篇文章给大家分享的是有关如何利用Python代码批量将PDF文件转为Word格式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在日常工作或学习中,经常会遇到这样的无奈:“小任...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作