Python批量对word文档进行操作步骤

 更新时间:2022年02月14日 08:43:30   作者:肥学  
这篇文章主要介绍了Python批量对word文档进行操作,一步步逐步完成创建文档,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

导读

前面几章我们以经介绍了怎么批量对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 + 1
        if i == len(target_list) - 1: #遍历到最后一行,按如下操作
            end = i
            table.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)
    
    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
链接:传送门
这里有关于操作的详细介绍

到此这篇关于Python批量对word文档进行操作的文章就介绍到这了,更多相关python批量word文档操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 定义函数 返回值只取其中一个的实现

    python 定义函数 返回值只取其中一个的实现

    这篇文章主要介绍了python 定义函数 返回值只取其中一个的实现操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python+pandas分析nginx日志的实例

    python+pandas分析nginx日志的实例

    下面小编就为大家分享一篇python+pandas分析nginx日志的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python Tkinter Entry和Text的添加与使用详解

    Python Tkinter Entry和Text的添加与使用详解

    这篇文章主要介绍了Python Tkinter Entry和Text的添加与使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 一文教会你用nginx+uwsgi部署自己的django项目

    一文教会你用nginx+uwsgi部署自己的django项目

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议,下面这篇文章主要给大家介绍了关于用nginx+uwsgi部署自己的django项目的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • python如何使用jt400.jar包代码实例

    python如何使用jt400.jar包代码实例

    这篇文章主要介绍了python如何使用jt400.jar包代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Django admin实现TextField字段changelist页面换行、空格正常显示

    Django admin实现TextField字段changelist页面换行、空格正常显示

    本文主要介绍了Django admin实现TextField字段changelist页面换行、空格正常显示,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python qqbot 实现qq机器人的示例代码

    Python qqbot 实现qq机器人的示例代码

    这篇文章主要介绍了Python qqbot 实现qq机器人的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python pandas.DataFrame.loc函数使用详解

    python pandas.DataFrame.loc函数使用详解

    这篇文章主要介绍了python pandas.DataFrame.loc函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python实现五子棋游戏

    python实现五子棋游戏

    这篇文章主要为大家详细介绍了python实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python Rich增加终端显示视觉效果

    Python Rich增加终端显示视觉效果

    Python开发中,命令行界面(CLI)经常被用于交互和数据展示,虽然命令行界面通常被视为简单、枯燥的文本显示区域,通过Python的Rich库,为命令行界面带来更多生机和视觉吸引力,本文带大家探索Rich功能强大的Python库,增强终端文本渲染,使输出更具有吸引力和可读性
    2024-01-01

最新评论