Python 自动化办公实战课
尹会生
前游戏公司技术总监,前新浪网研发中心技术经理
21781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
Python 自动化办公实战课
15
15
1.0x
00:00/00:00
登录|注册

02|善用Python扩展库:如何批量合并多个文档?

编写函数功能
将手工操作转换为Python程序实现
选择Word兼容的格式
处理不同类型文件合并时的问题
生成邀请函文件
使用通用和公开格式
add_picture函数
向下兼容或向上兼容
add_content_mode1函数
处理多个文件合并
自定义函数
merge_without_format函数
使用Python扩展库
提高工作效率
邀请函的格式从Word文件改为图片的解决方法
Word和各种类型合并增效的几个通用法则
将Excel和Word文件合并
将图片和Word文件合并
将纯文本和Word文件合并
使用python-docx扩展库
用Python读取文件的方式
思考题
小结
怎样合并不同类型的文件?
如何合并多个Word文件,只保留文字内容?
手工操作和用Python操作的区别
文章:善用Python扩展库:如何批量合并多个文档?

该思维导图由 AI 生成,仅供参考

你好,我是尹会生。
在日常工作中,我们打交道最多的文件就要数 Word 和 Excel 了。我们经常面临这么一种场景:需要将 Excel 的内容合并到 Word 中。你可以想一想,完成这个需求,需要手动进行几个步骤的操作呢?很显然,有 4 步。
首先,要手动打开 Excel、Word 文件;
接着,复制一个单元格的文字到 Word 指定位置;
然后,如果有多个单元格,就需要重复复制多次;
最后,保存 Word 文件,并关闭 Excel 和 Word 文件。
如果只有两个文件,这几步手动操作一定不成问题,不会耗费太多的时间。但是如果文件特别多,哪怕只有十几个,手动操作就相当耗费时间了,而且一不小心还容易出错。幸运的是,现在我们可以通过 Python 来实现批量文件合并功能,你只需要执行一个 Python 程序就能搞定所有文件的合并操作。
所以今天这节课,我们先从比较简单的内容讲起:用 Python 自动合并两个 Word 文件。然后再进阶,学习如何合并 Word 和其他类型的文件。一步一步来,相信你会掌握得既牢固又扎实。

手工操作和用 Python 操作的区别

首先我们要知道,为什么在合并文件的时候用 Python 更高效。我用一个例子来给你讲解手工操作和用 Python 操作的区别。比如下面这一段文字:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何使用Python扩展库来批量合并不同类型的文件,重点讲解了合并Word文件、Txt文件、图片和Excel文件的操作方法。作者首先比较了手工操作和使用Python操作的区别,强调了Python操作的高效性和便捷性。然后通过示例代码演示了如何使用python-docx扩展库实现Word文档自动化操作,包括合并多个Word文件并提取文字内容。此外,还介绍了将纯文本和Word文件合并、图片和Word文件合并、以及Excel和Word文件合并的具体操作方法。作者强调了选择Word兼容的格式、将手工操作转换为Python程序实现以及编写函数功能的重要性。最后,留下了一个思考题,引发读者思考如何解决邀请函格式从Word文件改为图片的问题。整体而言,本文以清晰的步骤和示例帮助读者了解了如何利用Python扩展库实现不同类型文件的合并,突出了Python操作的高效性和便捷性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 自动化办公实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • 🐑
    置顶
    编辑小提示:专栏的完整代码位置是https://github.com/wilsonyin123/python_productivity,可点击链接下载查看。 或者通过网盘链接提取后下载,链接是: https://pan.baidu.com/s/1UvEKDCGnU6yb0a7gHLSE4Q?pwd=5wf1,提取码: 5wf1。
    2022-03-30
  • 周文玲
    置顶
    老师,零基础学些这门课程感觉有些困难,一开始以为只是在excel里面去写函数就可以实现,听了您的课发现讲的挺详细的,但感觉自己不太能理解和应用,还是有点懵,如何有成效的学习这门课呢?

    作者回复: 这是正常现象,我来帮你梳理一下主要的学习目标,这样能帮你理解这些程序编写的目的。 首先在办公自动化工作当中引入编程并不是降低了办公自动化的门槛,反而是提高了。换句话说就是明明可以用5+5+5+5计算得到计算结果20,为什么要学习乘法,掌握5*4这种方法呢? 因为办公工作中有大量重复的工作时,不想手动做,那就需要掌握一个高级的工具,也就是编程语言,但是编程语言要先死记硬背Python语法,这些语法就像咱们学过的九九乘法表一样,没有捷径。我觉得这是作为零基础的同学学习起来比较困难的原因 其次,编程的概念比较抽象,最开始掌握的时候可以结合着例子来记忆,如果你的工作中有重复性的任务,结合起来记忆效率是最高的 最后,编程语言的学习过程是先模仿,再理解,最后再创造;这也可能和我们学习其他技能不大一样的地方。编程需要多写,慢慢才能够理解其中的含义。 希望能够对你有帮助

    2021-09-14
    4
  • 黄矢
    沿用老师的代码,生成docx文件,然后使用python拓展库将docx文件批量转pdf,最后将pdf批量转图片

    作者回复: 可以自己找一找pdf库,写一写会有更深刻的印象

    2021-02-07
    4
  • 建明
    老师其实我真的是完全的0基础,我听了前几节课如果能学好必然会对我的工作效率有质的提升,我目前还有一个0基础学Python,现在学这门课很困难,但我想学这门课,能否给我推荐一个学习的思路呢,如何构建我Python学习体系呢。

    作者回复: 我觉得可以先去模仿代码,然后再去理解。 另外可以找一些从零基础学拍摄的书籍作为系统性参考。 我为你推荐一本《learing Python the hardway》比较适合初学者。

    2021-03-06
    3
  • 吴杨
    老师的文稿能否发到其他云空间供我们下载,GitHub被墙的概率太高了。

    作者回复: 写程序是避免不了访问github的,推荐你一种方法,叫做github加速。例如: 使用github的镜像网站 原地址: https://github.com/xxx.git 替换为: https://github.com.cnpmjs.org/xxx.git

    2021-09-07
    2
  • 笨笨
    老师这个‘excel 提前处理为 python 的基础类型–字典(链接)’代码有吗?或者有把Excel处理好后的字典形式的最终结果吗?这里是把excel处理成了两个文件了吗?我想象如果要处理成一个字典的话是这样的:{姓名:韩梅梅,姓名:李雷,称呼:女士,称呼;女士}。但这样不太合理。

    作者回复: 是的,这是不太合理的,你可以选择字典中嵌入另一个字典,组成更复杂的结构(但是能表达更丰富的逻辑),也可以将字典中的姓名和称呼组合成一个列表,如: {[1,{姓名:韩梅梅},{称呼:女士}], [2,{姓名:李雷},{称呼:女士}],} 这种

    2023-06-26归属地:北京
  • 纳兰容若
    老师您好 为什么提示我在docx.py中没有Document类 我是在windows下用的pycharm python3.10

    作者回复: 检查一下是否安装了docx 库,安装的命令是 pip3 install docx

    2022-10-25归属地:广东
    2
  • 刘慧慧
    def merge_without_format(docx_files: list): 这个list整个代码未见使用定义在这里是干什么的?去掉这个list运行报 File "/Users/hhliu/Documents/test/autoWork/day01/mergeDoc.py", line 9, in merge_without_format another_doc = Document(docx_file) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/docx/api.py", line 25, in Document document_part = Package.open(docx).main_document_part File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/docx/opc/package.py", line 128, in open pkg_reader = PackageReader.from_file(pkg_file) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/docx/opc/pkgreader.py", line 32, in from_file phys_reader = PhysPkgReader(pkg_file) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/docx/opc/phys_pkg.py", line 31, in __new__ "Package not found at '%s'" % pkg_file docx.opc.exceptions.PackageNotFoundError: Package not found at 'c'

    作者回复: 我先来交代一下背景, Python是一种强类型的编程语言,也就是当某个变量(对象)是A类型,如果没有显示的改变,它在运行过程中一直是A类型,不是也不会变成B类型。 这里的list() 就是一个强制类型转换函数。它的作用是将list括号中的对象(变量名)的类型强制转换成为“列表类型”,而转换的原因是后面我们需要列表类型来对数据进行拆分。 因此如果去掉了list,后面代码逻辑处理的对象就是非列表类型,也就出现了无法拆分的类似错误。 更详细的内容可以参考Python基础数据类型 地址如下: https://docs.python.org/zh-cn/3.6/library/stdtypes.html

    2021-11-08
  • Armstrong
    merge_without_format函数里面newpar = doc.add_paragraph('') ......其中doc没有定义,是不是会报错?

    作者回复: doc对象的add_paragraph('')方法调用时,如果doc对象不存在肯定会报错的

    2021-08-09
  • 紫薯酸牛奶
    问题1: replace_content = { '<姓名>' : 'no_name', '<性别>' : 'm_f', '<今天日期>' : today, } 老师我想问下,制作邀请函中的 这个代码里面的no_name, 和m_f的含义是什么, 我自己想做个扩展练习,把邀请函模板里的酒店也批量替换掉,一直成功不了 问题2: 关于保存路径 # 邀请函路径 invitation_path = '测试文件/邀请函样例文件/111' 下面保存生成的文件代码是这个 file_name = PurePath(invitation_path).with_name(replace_content['<姓名>']).with_suffix('.docx') doc.save(file_name) 为啥总是保存在上一级文件夹(邀请函示例文件)而不是111这个文件夹 烦请老师帮忙解答下

    作者回复: 首先我先回答第二个问题,PurePath(invitation_path).with_name(replace_content['<姓名>']).with_suffix('.docx') 为了书写好看,这条语句较长,我们可以将它按照如下方式拆开 x=a().b().c() 拆分成 x=a() print(x) y=x.b() print(y) z=y.c() print(z) 根据每部分输出,相信你肯定能定位出路径问题出在哪个函数 接下来第一个问题也迎刃而解了,依然用print输出两个变量到终端,但是要注意,为了让代码更好调试,多个重复的文件和文字内容改成只有一个,即不改变代码里的for循环,但是因为内容只有一个,所以for循环只执行一次,这样整个程序就是自上到下顺序执行的了,这样便于你理解程序的工作原理,如果调试后还不理解我再直接提供答案给你

    2021-07-06
    3
收起评论
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部