目录标题

  • 导读
  • 应用
  • 细节介绍
  • 点击直接资料领取

导读

前面几章我们以经介绍了怎么批量对excelppt操作今天我们说说对word文档的批量操作

应用

python-docx允许您创建新文档以及对现有文档进行更改。实际上,它只允许您对现有文档进行更改;只是如果您从一个没有任何内容的文档开始,一开始可能会觉得您是从头开始创建一个文档。

这个特性是一个强大的特性。文档的外观很大程度上取决于删除所有内容时留下的部分。样式、页眉和页脚等内容与主要内容分开包含,允许您在起始文档中进行大量自定义,然后出现在您生成的文档中。

让我们逐步完成创建文档的步骤,一次创建一个示例,从您可以对文档执行的两项主要操作开始,将其打开并保存。

我这里做一个简单的演示

还是先定义合并单元格函数,以便后续多次调用。由于处理Word中表格的代码与处理Excel不同,所以函数也要做微调。主要变化就是合并的函数表达,对于word中的表格,表达式是table.cell(row1,col1).merge(table.cell(row2,col2)),意思是将第row1行col1列到row2行col2列之间的表格合并(row2,col2要分别大于等于row1和col1)。需要注意的是cell(0,0)表示第一行第一列的单元格,以此类推。如下函数是在例28的基础上修改的。

#定义合并单元格的函数
def Merge_cells(table,target_list,start_row,col):'''table: 是需要操作的表格target_list: 是目标列表,即含有重复数据的列表start_row: 是开始行,即表格中开始比对数据的行(需要将标题除开)col: 是需要处理数据的列'''start = 0 #开始行计数end = 0 #结束行计数reference = target_list[0] #设定基准,以列表中的第一个字符串开始for i in range(len(target_list)): #遍历列表if target_list[i] != reference: #开始比对,如果内容不同执行如下reference = target_list[i] #基准变成列表中下一个字符串end = i - 1 table.cell(start+start_row,col).merge(table.cell(end+start_row,col))start = end + 1if i == len(target_list) - 1: #遍历到最后一行,按如下操作end = itable.cell(start+start_row,col).merge(table.cell(end+start_row,col))

然后需要读取word中相应表格里的数据,并提取出来,以便作为是否合并的判断基础。使用Document打开word文档,先查看一下其中表格的个数,以便我们锁定要处理的表格。由于word里面可能有隐藏表格,或者一个表格中有一段去掉了边框,让人看起来像是两个表格,直接在word中去数表格个数有时会不靠谱。通过len(doc.tables)看到,这个文档里面有2个表格。打开word文档,我们可以看到要处理的表格是第一个,即doc.tables[0]。如果情况较为复杂,我们可以打印表格中第一行单元格的内容进一步确认是否是我们需要处理的表格。确认好表格的序号后,就可以开始读取内容了。

from docx import Document
doc = Document("收货记录.docx")
print("这个工作表有 {} 个表格。\n".format(len(doc.tables))) #查看表格中的个数,以便锁定我们要处理的表格print("第一个表格的第一行的单元格中的内容如下:")
for i in doc.tables[0].rows[0].cells: #读取第一个表格的第一行的单元格中的内容print(i.text)第一个表格的第一行的单元格中的内容如下:
序号
供应商名称
货物编码
货物型号
货物说明
数量
日期

表格:

doc.tables[0].rows[0].cells[0].text
'序号'

接着:

#读取word文档中的第一个表格的第二和第三列除标题和尾部总数行的数据
doc = Document("收货记录.docx")
table = doc.tables[0] #已确定是第一个表格,其索引是0
supplier = [] #存储供应商名称
pn = [] #存储物料编码
max_row = len(table.rows) #获取第最大一行
print("表格共有{}行".format(max_row))#读取第二行到29行,第2,3列中的数据
for i in range(1,max_row-1):supplier_name = table.rows[i].cells[1].text #cells[1]指表格第二列supplier.append(supplier_name)for i in range(1,max_row-1):material_pn = table.rows[i].cells[2].text #cells[2]指表格第三列pn.append(material_pn)print("获取到{}个供应商名称,{}个物料编码。".format(len(supplier),len(pn)))表格共有30行
获取到28个供应商名称,28个物料编码。
Merge_cells(table,supplier,1,1) #开始合并行为2,索引为1;供应商名称是在2列,索引为1
Merge_cells(table,pn,1,2) #开始合并行为2,索引为1;物料编码是在3列,索引为2
doc.save("检查.docx")

到这一步,合并单元格算是完成了,但结果如下图所示,原单元格中的内容全部集中在一起,造成了重复内容。我们需要重写这些单元格以覆盖掉重复的内容,即可得到我们想要的结果。

结果:

细节介绍

关于python-docx
链接:传送门
这里有关于操作的详细介绍

特别介绍

批量对word文档进行操作相关推荐

  1. python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...

    目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...

  2. 用Word转换向导批量转换Word文档(转)

    用Word转换向导批量转换Word文档(转)     目前,我校所在地区教育系统上下级之间文件材料的下达和上报都实现了网络传输.为了提高办公效率,主管教育部门要求这些材料一律使用纯文本格式.而由于排版 ...

  3. 办公室小姐姐的福利!用Python批量提取word文档中的表格和图片内容

    点上方"菜鸟学Python",选择"星标" 第491篇原创干货,第一时间送达 最近有许多小伙伴想要一些自动化办公的福利小程序,今天就满足大家的需求.日常的办公过 ...

  4. 如何批量将 Word 文档转为 HTML 格式

    概要:HTML 的全称为超文本标记语言,是一种标记语言.我们可以将所需要表达的信息按某种规则写成 HTML 文件,这样可以通过专用的软件来识别,比如常用的浏览器.这些软件可以将这些 HTML 文件&q ...

  5. 如何批量将 Word 文档转为 ePub 格式

    概要:ePub 是一个自由的开放标准,属于一种可以"自动重新编排"的内容,也就是文字内容可以根据阅读设备的特性,以最适于阅读的方式显示,所以现在主流的电子书基本都是 ePub 的. ...

  6. 快速批量修改word文档内容

    快速批量修改word文档内容 在工作中可能经常遇到需要对word中同一位置的内容进行批量修改或者替换,如果数据量小,手动改一改就可以了,但是遇到大量的修改,再用手动修改的方法的话,工作量就变得很大了, ...

  7. 如何批量设置 Word 文档的限制编辑?

    概要:有时候我们完成了我们的 Word 文档的编辑之后,我们就会发给相关的人员进行审阅.但是又害怕别人将我们的内容直接进行修改.所以我们通常会设置 Word 文档的限制编辑之后再发给相关人员.并且设置 ...

  8. 批量替换 Word 文档最后几页

    概要:Word 文档当中的页面非常的多,我们可以对某一个页面进行删除也可以对某个页面进行修改,同时也可以在某一个页面后面插入一个新的页面,这些操作都是对基本的,相信大家处理起来都非常的得心应手了.假如 ...

  9. Excel转Word,Excel导出Word,利用Excel表批量生成Word文档,邮件合并进阶版

    单击播放视频教材 利用Excel数据批量生成Word文档升级版,Excel转W 01需求概述 假设有图1所示的数据,需要批量生成WORD成绩通知单,通知单必须遵循图2的样式. (案例中的姓名.学校名称 ...

  10. 如何批量设置 Word 文档仅允许批注或修订?

    概要:在 Word 文档中文档的保护有多种不同的级别.可以设置 Word 文档的打开密码,也可以设置 Word 文档的只读密码,还可以限制 Word 的编辑.并且限制编辑的同时也可以允许批注或者允许批 ...

最新文章

  1. VirtualBox虚拟机安装RedHat7.3编译Linux0.01内核
  2. ASP.NET常见几种安全问题
  3. 深度学习性能提升的诀窍
  4. Linux常用命令——fsck
  5. VMware-workstation-6.0 安装系统前必须映射光驱盘符
  6. MindSpore感恩节重磅福利,华为Mate 40E送送送!
  7. Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则
  8. windows编程点滴(四)之线程的同步
  9. python怎么爬虎牙_使用python爬虫框架scrapy抓取虎牙主播数据
  10. Larbin源代码分析[6]LARBIN中线程处理类
  11. python2编码_Python2字符编码
  12. 前端面试有这几篇就够了--HTML篇
  13. 雷锋科普:联发科MT6577,国产平民双核手机的芯
  14. 考研政治---马克思主义基本原理概论---认识论
  15. Habor镜像仓库的使用
  16. Ruby on Rails 实践:更换 aloe 首页
  17. allow_url_fopen和allow_url_include详解
  18. Android 中英文切换的实现。
  19. 巴菲特的在University of Florida商学院的一次演讲
  20. [转贴]eclipse和netbeans的区别

热门文章

  1. SECS/GEM协议库开发开源代码
  2. 在CentOS 7 1804 中 安装 使用 GitLab 11.4.3-ee (企业版、社区版最新版、或任意版本)
  3. DEVELOPMENT OF A LOW-COST VISION SYSTEM FOR FINDING CONTOUR AND SURFACE DEFECTS ON CAST IRON ENGINE
  4. 关于FAST迅捷FWR310无线路由器桥接移动光猫吉比特网关的问题
  5. Spring boot 与 Spring MVC
  6. mysql中sql添加表字段_SQL如何添加字段
  7. 那智机器人程序打印_应用程序,机器人程序,无人机和3D打印机:要来附近的学校吗?...
  8. 智慧校园APP开发有哪些功能
  9. python网易云音乐下载器爬取全网音乐
  10. IK(反向动力学)简单原理与实现