Python操作Word

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.mfbz.cn/a/256438.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于javaweb实现的家教系统

一、系统架构 前端:jsp | js | css | jquery 后端:spring | springmvc | spring-orm 环境:jdk1.7 | mysql 二、代码及数据库 三、功能介绍 01. 管理后台-首页 02. 管理后台-用户信息管理 03. 管理后台-订单信息管理 04. 管理后台-辅…

在Java中高效使用Lambda表达式和流(Streams)的技巧

Java中如何高效使用Lambda表达式和流(Streams)的技巧 1. 简介 在Java中,Lambda表达式和流(Streams)是Java 8引入的两个强大的特性。Lambda表达式为Java添加了一种简洁的方式来实现函数式编程,而流提供了一…

强大的剪切板管理 Paste中文 for Mac

Paste是一款剪切板管理工具,它可用于Mac和iOS设备。Paste的主要功能是帮助用户管理剪切板中的复制和剪切的内容,使其更方便地访问、组织和重用。 以下是Paste剪切板管理工具的主要特点和功能: 剪切板历史记录:Paste会自动记录您复…

从头开始实现LoRA以及一些实用技巧

LoRA是Low-Rank Adaptation或Low-Rank Adaptors的缩写,它提供了一种用于对预先存在的语言模型进行微调的高效且轻量级的方法。 LoRA的主要优点之一是它的效率。通过使用更少的参数,lora显著降低了计算复杂度和内存使用。这使我们能够在消费级gpu上训练大…

uniapp H5项目使用ucharts的Echart组件方式创建圆环

问题:没有报错但是图表不出来 【 调试了半天圆环图表没有不出来。是因为没有明示设置宽度与高度】 /* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */ .charts-box { width: 100%; height: 300px; } 最终效果 先导入ucharts到项目 uniapp的项目…

大模型(LLM)+词槽(slot)构建动态场景多轮对话系统

构建动态场景多轮对话系统 引言 在人工智能和自然语言处理领域,聊天机器人的开发一直是一个热点话题。近年来,随着大型语言模型(LLM)的进步,构建能够理解和响应各种用户需求的聊天机器人变得更加可行和强大。本文将介…

机器学习---决策树

介绍 决策树和随机森林都是非线性有监督的分类模型。 决策树是一种树形结构,树内部每个节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶子节点代表一个分类类别。通过训练数据构建决策树,可以对未知数据进行分类, 随机森林是由多个决策树组成,随机森林中每…

很抱歉,Midjourney,但Leonardo AI的图像指导暂时还无人能及…至少目前是这样

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

使用Python Scrapy设置代理IP的详细教程

目录 前言 一、代理IP的作用和原理 二、Scrapy框架中设置代理IP的方法 步骤1:安装依赖库 步骤2:配置代理IP池 步骤3:创建代理IP中间件 步骤4:激活代理IP中间件 步骤5:运行爬虫程序 三、代码示例 四、常见问题…

Redis7--基础篇9(SpringBoot集成Redis)

1. jedis、lettuce、Redistemplate的关系 第一代为jedis,之后推出了lettuce,然后springboot继承了Redistemplate,现推荐使用Redistemplate。 总的来说,jedis、lettuce、Redistemplate都是java操作Redis数据库的驱动。 2. 本地Ja…

一文快速了解oCPX

01 什么是oCPX o是Optimized,优化一词的首字母。 CPX即Cost Per X,“X”即泛指传统的那些按不同方式进行结算的模式,如:CPC(Cost Per Click,按点击付费)、CPM(Cost Per Mille&…

我从阿里云学到的返回值处理技巧

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 阿里云CosmoController…

为什么多片DDR菊花链拓扑连接时末端需要接很多的电阻

大家如果做过DDR的设计可能会发现在进行多片DDR连线时,通常在信号的末端会放置很多的电阻(如下图所示),那么这些电阻都是起什么作用的呢? 通常在DDR末端的电阻是为了防止信号反射的,起阻抗匹配的作用,之前我们介绍过另…

linux修改用户uid和gid并且修改文件所有权(所属用户及所属用户组)(chown命令、chgrp命令)(批量修改查找并修改文件、目录uid和gid)

文章目录 修改Linux用户UID和GID以及文件所有权1. 修改用户的UID和GID1.1 用户UID和GID的概念1.2 修改用户UID1.3 修改用户GID 2. 修改文件所有权2.1 文件所有权的概念2.2 修改文件所有者(chown命令)2.3 修改文件所属用户组(chgrp命令&#x…

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现

Apache CouchDB 垂直权限绕过漏洞 CVE-2017-12635 已亲自复现 漏洞名称影响版本影响版本 漏洞复现环境搭建漏洞利用 总结 漏洞名称 影响版本 Apache CouchDB是一个开源的NoSQL数据库,专注于易用性和成为“完全拥抱web的数据库”。它是一个使用JSON作为数据存储格式…

设计模式——代理模式(Proxy Pattern)

概述 代理模式是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在访问对象和目标对象之间起到中介作用。代理对象也可以在不修改目标对象的前提下,提供额外的功能操作,拓展目标对象的功能,比如说在目标对象的某个方法…

LeetCode 1901. 寻找峰值 II:二分查找

【LetMeFly】1901.寻找峰值 II:二分查找 力扣题目链接:https://leetcode.cn/problems/find-a-peak-element-ii/ 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c…

C#调用阿里云接口实现动态域名解析,支持IPv6(Windows系统下载可用)

电信宽带一般能申请到公网IP,但是是动态的,基本上每天都要变,所以想到做一个定时任务,随系统启动,网上看了不少博文很多都支持IPv4,自己动手写了一个。 (私信可全程指导) 部署步骤…

20231218在Ubuntu18.04下以EXT4格式化HDD

20231218在Ubuntu18.04下以EXT4格式化HDD 2023/12/18 17:24 缘起: 编译一个Android10大概要200GB,编译10个Android10的SDK,3TB的HDD机械硬盘就估计会被填满了! 如果使用rm -rf *这个命令将SDK一个一个逐个地删除,估计2…

强大的电子书阅读器:OmniReader Pro for mac

🔍 OmniReader Pro 是一款专为 Mac 设计的强大阅读工具,它能够帮助你更高效地阅读和处理各种文本内容。无论是电子书、新闻文章、网页文本还是文件资料,OmniReader Pro 都能胜任! ✅ OmniReader Pro 提供了丰富的功能&#xff0c…
最新文章