Python操作Word

news2024/11/25 5:02:05

Python操作Word

    • 一、Word简介
    • 二、向Word写入内容
      • 2.1 导入模块
      • 2.2 创建doc文档对象
      • 2.3 添加段落
      • 2.4 添加列表
      • 2.5 添加图片
      • 2.6 保存文件
    • 三、读取Word内容
    • 四、批量生成Word文件

一、Word简介

​ 在日常工作中,有很多简单重复的劳动其实完全可以交给Python程序,比如根据样板文件(模板文件)批量的生成很多个Word文件或PowerPoint文件。Word是微软公司开发的文字处理程序,相信大家都不陌生,日常办公中很多正式的文档都是用Word进行撰写和编辑的,目前使用的Word文件后缀名一般为.docx。PowerPoint是微软公司开发的演示文稿程序,是微软的Office系列软件中的一员,被商业人士、教师、学生等群体广泛使用,通常也将其称之为“幻灯片”。在Python中,可以使用名为python-docx 的三方库来操作Word

​ 我们可以先通过下面的命令来安装python-docx三方库。

pip install python-docx

注意事项:

  • 我们在安装此模块使用的是pip install python-docx,但是在导入的时候是 docx

# 一般情况下
pip install python-docx
我们在安装此模块使用的是pip install python-docx,但是在导入的时候是 docx
# 说明:只需要执行pip install python-docx,会自动安装lxml

# 可能出现问题:
高版本lxml没有etree模块。有网友确定lxml4.2.5版本带有etree模块,且该版本lxml支持python3.7.4版本。安装命令:
pip install lxml==4.2.5  (若python-docx 使用有问题,需要查看lxml版本)

二、向Word写入内容

2.1 导入模块

注:操作word,需要安装python-docx库,但是在代码中使用的时候导入docx

from docx import Document

2.2 创建doc文档对象

doc = Document()

2.3 添加段落

doc.add_heading('在Python中操作Word文档',2)

注意:在Word中,一个段落可能有很多个组件组成

  • 给段落添加组件
run1 = p.add_run('Python是可以跨平台的,')
run2 = p.add_run('Python可以做数据分析,')
run3 = p.add_run('Python还可以做web开发等。')

run1.bold = True  # 设置加粗
run2.underline = True   # 设置下划线

2.4 添加列表

  • 有序序列
doc.add_paragraph('运营部',style='List Number')
doc.add_paragraph('行政部',style='List Number')
doc.add_paragraph('市场部',style='List Number')
doc.add_paragraph('财务部',style='List Number')
doc.add_paragraph('人事部',style='List Number')
  • 无序序列
doc.add_paragraph('运营部',style='List Bullet')
doc.add_paragraph('行政部',style='List Bullet')
doc.add_paragraph('市场部',style='List Bullet')
doc.add_paragraph('财务部',style='List Bullet')
doc.add_paragraph('人事部',style='List Bullet')

2.5 添加图片

# 用于图片控制大小
from docx.shared import Cm

doc.add_picture(r'data/py.jpg',width=Cm(3))

2.6 保存文件

doc.save(r'data/python操作word.docx')

三、读取Word内容

一个文本(document)可能有很多的段落(paragraphs)组成,一个段落可能有很多的组件(runs )组成

from docx import Document

# 1.创建doc对象
doc = Document(r"data/占勇辉的离职证明.docx")

# 2.获取doc中所有的段落,结果为列表,其中的元素为段落对象
print(doc.paragraphs)

# 3.遍历段落,获取段落的文本组成
for index, para in enumerate(doc.paragraphs):
    print(index, para.text)
    # 获取每个段落的组件
    # print(para.runs)
    # 获取每个组件的文本
    for run in para.runs:
        print(run.text)

四、批量生成Word文件

​ 试想,我们如果把上面的离职证明制作成一个模板文件,把姓名、身份证号、入职和离职日期等信息用占位符代替,这样通过对占位符的替换,就可以根据实际需要写入对应的信息,这样就可以批量的生成Word文档。

说明:如果需要批量生成文件,则需提前准备模板【一定要考虑到段落的组成】,就可以借助于下面代码的思想操作

实现思路:

  • 首先编辑一个离职证明的模板文件
  • 接下来我们读取该文件,将占位符替换为真实信息,就可以生成一个新的Word文档

image-20231030223856842

# 将员工信息保存在字典中
person_list = [
    {
        "name":"杨天偿",
        "id":"333222199909120987",
        "sdate":"2017年7月1日",
        "edate":"2021年11月1日",
        "department":"技术部",
        "position":"架构师",
        "company":"深圳华为技术有限公司"
    },
    {
        "name":"刘一奇",
        "id":"110120198909120937",
        "sdate":"2016年3月1日",
        "edate":"2020年10月1日",
        "department":"行政部",
        "position":"打手",
        "company":"黑龙江天上人间桑拿会所"
    },
    {
        "name":"张国涛",
        "id":"111222199908120987",
        "sdate":"2015年4月1日",
        "edate":"2019年11月1日",
        "department":"后厨部",
        "position":"试吃员",
        "company":"深圳市金威源餐饮有限公司"
    },
    {
        "name":"欧阳",
        "id":"112221199909120987",
        "sdate":"2016年7月1日",
        "edate":"2020年11月1日",
        "department":"后勤部",
        "position":"大茶壶",
        "company":"深圳市怡红院高级会所"
    },
]
from docx import Document

# 将员工信息保存在字典中
person_list = [
    {
        "name": "杨天偿",
        "id": "333222199909120987",
        "sdate": "2017年7月1日",
        "edate": "2021年11月1日",
        "department": "技术部",
        "position": "架构师",
        "company": "深圳华为技术有限公司"
    },
    {
        "name": "刘一奇",
        "id": "110120198909120937",
        "sdate": "2016年3月1日",
        "edate": "2020年10月1日",
        "department": "行政部",
        "position": "打手",
        "company": "黑龙江天上人间桑拿会所"
    },
    {
        "name": "张国涛",
        "id": "111222199908120987",
        "sdate": "2015年4月1日",
        "edate": "2019年11月1日",
        "department": "后厨部",
        "position": "试吃员",
        "company": "深圳市金威源餐饮有限公司"
    },
    {
        "name": "欧阳",
        "id": "112221199909120987",
        "sdate": "2016年7月1日",
        "edate": "2020年11月1日",
        "department": "后勤部",
        "position": "大茶壶",
        "company": "深圳市怡红院高级会所"
    },
]

# 遍历列表,批量生成离职证明
for person in person_list:
    # 读取离职证明的模版文件
    doc = Document(r"data/离职证明模板.docx")
    # 数据处理
    for p in doc.paragraphs:
        # 过滤无需处理的段落
        if "{" not in p.text:
            continue
        # 处理带有{的段落
        for run in p.runs:
            # 过滤无需处理的组件
            if "{" not in run.text:
                continue
            # print(run.text)
            # 将模版中{xxx}数据进行替换
            # 通过切片,获取到xxx,就可以匹配到字典的key
            key = run.text[1:-1]
            # print(key)
            # 替换操作
            run.text = run.text.replace(run.text, person[key])

    # 将处理之后的文件进行保存
    doc.save(fr"data/{person['name']}的离职证明.docx")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Camtasia2024下载安装使用教程汇总

Camtasia Studio2024提供了强大的屏幕录像(Camtasia Recorder)、视频剪辑和编辑(Camtasi Studio)、视频菜单制作(Camtasia MenuMaker)等功能,界面简洁明晰、操作方便快捷。使用Camtasia Studio官方用户可以方便地进行屏幕操作的录制和配音、视频的剪辑和过场动画、添…

晚期食管癌肿瘤治疗线程分类

文章目录 1、肿瘤治疗的线数1.1 基础概念1.2 线程定义1.3 如何计算治疗线数 2 食管癌治疗指南2.1 食管癌诊疗指南2.1 CSCO 本文前半部分主要来源于参考文件1,其余部分来源于官方指南。无原创内容,全部为摘要。 1、肿瘤治疗的线数 1.1 基础概念 抗肿瘤药…

【Hive】——DML

1 Load(加载数据) 1.1 概述 1.2 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)]LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol…

ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian 如需转载备注出处 需求 虽然是做BW模块,但是最近项目上种种,都需要给ABAP人员或者前台用户提供能供他们使用的表,就稍微研究了下ABAP和HANA的集成问题,因为我们BW更擅长的还是HANA,而且HANA的运行效…

什么是 DDoS ?如何识别DDoS?怎么应对DDOS攻击

什么是DDOS攻击 DDoS攻击(Distributed Denial of Service Attack)即分布式拒绝服务攻击,是一种利用分布式网络来发起大量的请求,占用目标服务器或网络资源的攻击行为。这种攻击方式可以瘫痪目标系统,导致其无法正常提供…

TensorFlow 2 和 Keras 之间的区别总结

1、什么是TensorFlow 2 TensorFlow 2是谷歌开源的一款深度学习框架,于2019年发布,并且在同年10月1日发布了TensorFlow 2.0.0正式稳定版。这款框架被很多企业与创业公司广泛用于自动化工作任务和开发新系统。 TensorFlow 2在分布式训练支持、可扩展的生…

MATLAB - 使用 MPC Designer 线性化 Simulink 模型

系列文章目录 前言 本主题介绍如何使用 MPC Designer 对 Simulink 模型进行线性化。为此,请从包含 MPC 控制器块的 Simulink 模型打开该应用程序。本例中使用 CSTR_ClosedLoop 模型。 open_system(CSTR_ClosedLoop) 在模型窗口中,双击 MPC 控制器模块。…

了解 SBOM (软件物料清单)

近年来,开源软件在开发中的采用激增,目前已占已构建软件的高达 90%。它在全球公司中的受欢迎程度源于成本节约和产品上市时间的加快。然而,在集成开源软件组件时,有一个关键的方面需要考虑。 Synopsys 报告84% 的商业和专有代码库…

未来十年,人工智能就业方向及前景如何?

人工智能(AI)是一个快速发展的领域,对于未来的就业方向和前景有着巨大的影响。以下是一些可能的发展趋势和就业前景: 1、增长趋势:人工智能正在全球范围内经历巨大的增长,预计在未来十年内将继续保持这一趋…

rn报错 run react-native-start,rn真机报错bug解决

错误信息 这个问题是因为手机和电脑没有链接起来需要实行通讯 ADB ADB (Android Debug Bridge) ,译作 安卓调试桥 ,一个能让你 与Android设备进行通信 的 命令行工具 。 你可以通过它,在命令行输入命令控制Android设备,或者查看…

【map】【单调栈 】LeetCode768: 最多能完成排序的块 II

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 排序 map 区间合并 题目 给你一个整数数组 arr 。 将 arr 分割成若干 块 ,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 返回…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境(Environment)相关…

uniapp 预览图片

preImg(index){let urls []this.images.map((item,i) > {if(indexi){urls.unshift(item.file_path)}else{urls.push(item.file_path)}})uni.previewImage({urls})}

探索关系:Python中的Statsmodels库进阶

目录 写在开头1. 多元线性回归场景介绍 2. Logistic回归2.1 Logistic回归的概念2.2 应用案例2.2.1 建立模型和预测2.2.2 模型结论2.2.3 模型优化 3. 时间序列分析3.1 时间序列分析中的应用3.2 利用Statsmodels进行简单的时间序列分析 写在最后 写在开头 在数据分析的旅程中&am…

【react】原理简介

一、setState() 的说明 1.1 更新数据 setState() 是异步更新数据的注意:使用该语法时,后面的 setState() 不要依赖于前面的 setState()可以多次调用 setState() ,只会触发一次重新渲染 1.2 推荐语法 推荐:使用 setState((sta…

C++内存布局

温故而知新,本文浅聊和回顾下C内存布局的知识。 一、c内存布局 C的内存布局主要包括以下几个部分: 代码段:存储程序的机器代码。.数据段:存储全局变量和静态变量。数据段又分为初始化数据段(存储初始化的全局变量和…

深入解析Guava范围类(Range)

第1章:范围类Range的重要性 大家好,我是小黑,今天咱们聊聊一个在Java编程世界里非常实用但又被低估的角色——Guava库中的Range类。你知道吗,在处理涉及到数值范围的问题时,Range类就像是咱们的救星。不论是判断某个数…

Redis设计与实现之订阅与发布

目录 一、 订阅与发布 1、 频道的订阅与信息发送 2、订阅频道 3、发送信息到频道 4、 退订频道 5、模式的订阅与信息发送 ​编辑 6、 订阅模式 7、 发送信息到模式 8、 退订模式 三、订阅消息断连 1、如果订阅者断开连接了,再次连接会不会丢失之前发布的消…

SiLM5350MDBCA-DG车规级隔离驱动芯片,我们能为汽车智能提供什么?

SiLM5350MDBCA-DG是一款适用于IGBT、MOSFET的单通道 隔离门极驱动器,具有10A拉电流和10A灌电流驱动能 力。提供内部钳位功能,可单独控制 上升时间和下降时间。 在 SOP8 封 装 中 具 有 3000VRMS 隔 离 耐 压 ( 符 合 UL1577)。 与…

MySQL数据库 约束

目录 约束概述 外键约束 添加外键 删除外键 删除/更新行为 约束概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 分类: 注意:约束是作用于表中字段上…