Python docx:在Python中创建和操作Word文档

使用docx库,可以执行各种任务

  • 创建新文档:可以使用库从头开始或基于模板生成新的Word文档。这对于自动生成报告、信函和其他类型的文档非常有用。
  • 修改现有文档:可以打开现有的Word文档,并使用库修改其内容、格式、样式等。这对于自动更新遵循特定结构的文档特别方便。
  • 添加内容:可以使用库向文档添加段落、标题、表格、图像和其他元素。这有助于用数据动态填充文档。
  • 格式化:该库允许将各种格式化选项应用于文档中的文本和元素,例如更改字体、颜色、对齐方式等。
  • 提取信息:还可以从现有Word文档中提取文本、图像、表格和其他内容,以便进一步分析

Docx functions

1. 文档创建和保存

  • Document(): 创建一个新的word文档
  • Document.save(‘filename.docx’):保存一个document 称为文件(*.docx)

2. Paragraphs and Text (段落和文本)

  • add_paragraph(‘text’): 添加具有指定文本(text)的新段落(Paragraphs)。
  • paragraph.text:获取或设置段落的文本内容。

3. Headings (标题,可以设置几级标题)

  • add_heading(‘text’, level=n): 添加具有指定文本和级别的标题 (1 to 9).

4. Styles and Formatting (样式与格式)

  • paragraph.style = ‘StyleName’: 应用特定的段落样式
  • run = paragraph.add_run(‘text’): 添加一段具有特定格式的文本
  • run.bold, run.italic, etc.: 对管路(run)应用格式设置

5. Tables (表格操作)

  • add_table(rows, cols): 添加具有指定行数和列数的表
  • table.cell(row, col): 获取表中的特定单元格(cell)
  • cell.text:获取或设置单元格的文本内容
  • table.rows, table.columns:访问表的行和列

6. Images(图片操作)

  • document.add_picture(‘image_path’): 向文档中添加图像
  • run.add_picture(‘image_path’): 将图像添加到特定管道(run)中, 比如简历照片位置固定的

7. Document Properties (文档属性)

  • document.core_properties.title: 设置文档的标题
  • document.core_properties.author: 设置文档的作者
  • document.core_properties.keywords: 设置文档的关键词

8. Sections and Page Setup (分区和页面设置)

  • section = document.sections[0]: 获取文档的第一部分( Get the first section of the document)
  • section.page_width, section.page_height: 设置页面尺寸(Set page dimensions)

9. Lists (列表)

就是markdown中的list,比如下面的这两个就是无序的,大标题1,2,3…就是有序的

  • add_paragraph(‘text’, style=’ListBullet’):创建无序列表( Create a bulleted list)
  • add_paragraph(‘text’, style=’ListNumber’): 创建有序列表(Create a numbered list.)

10. Hyperlinks (超链接)

  • run.add_hyperlink(‘url’, ‘text’): 给当前管道(run)内的特定文本(text)添加超链接(Add a hyperlink to a run)

11. Document Modification (文件修改)

  • document.paragraphs: 访问文档中的所有段落(Access all paragraphs in the document)
  • document.tables: 访问文档中的所有表格(Access all tables in the document)
  • document.styles: 访问和操作文档样式(Access and manipulate document styles)

12. Document Reading(文档读取)

  • Document(‘filename.docx’): 读取一个存在的word文件
  • document.paragraphs[0].text: 访问第一段(paragraphs)的文本(text)

小例子

1. Installation (安装)

pip install python-docx

2. 创建一个新的word文档

创建一个包含文本、标题、表格、图像和格式的文档

  1. Create a new document.(创建一个新的document 对象)
  2. Add a title with centered alignment.(添加一个标题(title)并居中对齐)
  3. Add a paragraph with bold and italic text.(添加带有粗体和斜体文本的段落)
  4. Add a heading and a bulleted list.(添加标题(heading)和项目符号列表)
  5. Add a table with custom column widths.(添加table,并自定义列宽)
  6. Add an image to the document.(添加图片)
  7. Save the document with the name ‘example_document.docx’.(保存文件,文件名为 example_document.docx)
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH# Create a new document
doc = Document()# Add a title
title = doc.add_heading('Document Creation Example', level=1)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER# Add a paragraph with bold and italic text
paragraph = doc.add_paragraph('This is a sample document created using the python-docx library.')
run = paragraph.runs[0]
run.bold = True
run.italic = True# Add a heading
doc.add_heading('Section 1: Introduction', level=2)# Add a bulleted list
list_paragraph = doc.add_paragraph()
list_paragraph.add_run('Bullet 1').bold = True
list_paragraph.add_run(' - This is the first bullet point.')
list_paragraph.add_run('\n')
list_paragraph.add_run('Bullet 2').bold = True
list_paragraph.add_run(' - This is the second bullet point.')# Add a table
doc.add_heading('Section 2: Data', level=2)
table_1 = doc.add_table(rows=1, cols=2)
table_1.style = 'Table Grid'
table_1.autofit = False
table_1.allow_autofit = False
for row in table_1.rows:for cell in row.cells:cell.width = Pt(150)
table_1.cell(0, 0).text = 'cat'
table_1.cell(0, 1).text = 'dog'table_2 = doc.add_table(rows=3, cols=3)
table_2.style = 'Table Grid'
table_2.autofit = False
table_2.allow_autofit = False
for row in table_2.rows:for cell in row.cells:cell.width = Pt(100)
table_2.cell(0, 0).text = 'Name'
table_2.cell(0, 1).text = 'Age'
table_2.cell(0, 2).text = 'City'
for i, data in enumerate([('Alice', '25', 'New York'), ('Bob', '30', 'San Francisco'), ('Charlie', '22', 'Los Angeles')], start=0):print(i, data)table_2.cell(i, 0).text = data[0]table_2.cell(i, 1).text = data[1]table_2.cell(i, 2).text = data[2]# Add an image
doc.add_heading('Section 3: Image', level=2)
doc.add_paragraph('Here is an image of cat:')
doc.add_picture('../imgs/cat.jpg', width=Pt(300))# Save the document
doc.save('../word_files/example_new_document.docx')

结果(哈哈,样式有点丑,暂时忽略…):

在这里插入图片描述

3. 修改现有的word文档

  1. open an existing Word document (‘existing_document.docx’).( 读取一个存在的word文档)
  2. Modify the text, formatting, and alignment of the first paragraph.(修改第一段的文本、格式和对齐方式)
  3. Add a new heading.(添加一个新的标题)
  4. Add a new paragraph with a hyperlink.(添加带有超链接的新段落)
  5. Add a new table with custom column widths and data.(添加一个具有自定义列宽和数据的新表)
  6. Save the modified document as ‘modified_document.docx’.(将修改后的文档另存为“modified_document.docx”)
import docx
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPHdef add_hyperlink(paragraph, url, text, color, underline):"""A function that places a hyperlink within a paragraph object.:param paragraph: The paragraph we are adding the hyperlink to.:param url: A string containing the required url:param text: The text displayed for the url:return: The hyperlink object"""# This gets access to the document.xml.rels file and gets a new relation id valuepart = paragraph.partr_id = part.relate_to(url, docx.opc.constants.RELATIONSHIP_TYPE.HYPERLINK, is_external=True)# Create the w:hyperlink tag and add needed valueshyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')hyperlink.set(docx.oxml.shared.qn('r:id'), r_id, )# Create a w:r elementnew_run = docx.oxml.shared.OxmlElement('w:r')# Create a new w:rPr elementrPr = docx.oxml.shared.OxmlElement('w:rPr')# Add color if it is givenif not color is None:c = docx.oxml.shared.OxmlElement('w:color')c.set(docx.oxml.shared.qn('w:val'), color)rPr.append(c)# Remove underlining if it is requestedif not underline:u = docx.oxml.shared.OxmlElement('w:u')u.set(docx.oxml.shared.qn('w:val'), 'none')rPr.append(u)# Join all the xml elements together add add the required text to the w:r elementnew_run.append(rPr)new_run.text = texthyperlink.append(new_run)paragraph._p.append(hyperlink)return hyperlink
# Open an existing documentdoc = Document('../word_files/example_new_document.docx')# Access the first paragraph and modify its text and formatting
first_paragraph = doc.paragraphs[0]
first_paragraph.text = 'Updated Text: 宫廷玉液酒,一百八一杯。'
run = first_paragraph.runs[0]
run.bold = True #加粗
run.italic = True #斜体
run.font.size = Pt(20) #字号
first_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER #居中对齐# Add a new heading
doc.add_heading('New Section', level=1)# Add a new paragraph with a hyperlink
new_paragraph = doc.add_paragraph('Visit my bolg website: ')
hyperlink = add_hyperlink(new_paragraph,'https://blog.csdn.net/weixin_40959890/article/details/137598605?spm=1001.2014.3001.5501','Python docx:在Python中创建和操作Word文档','FF8822', True)
# run = new_paragraph.add_run('Python docx:在Python中创建和操作Word文档')
# run.hyperlink.address = 'https://blog.csdn.net/weixin_40959890/article/details/137598605?spm=1001.2014.3001.5501'# Add a new table
doc.add_heading('Table Section', level=2)
table = doc.add_table(rows=4, cols=4)
table.style = 'Table Grid'
table.autofit = False
table.allow_autofit = False
for row in table.rows:for cell in row.cells:cell.width = Pt(100)
table.cell(0, 0).text = 'Name'
table.cell(0, 1).text = 'Age'
table.cell(0, 2).text = 'City'
for i, data in enumerate([('David', '128', 'London'), ('Emma', '135', 'New York'), ('John', '122', 'Los Angeles')], start=1):table.cell(i, 0).text = data[0]table.cell(i, 1).text = data[1]table.cell(i, 2).text = data[2]# Save the modified document
doc.save('../word_files/example_modified_document.docx')
结果看一下(依旧很丑,哈哈,但是修改成功了):

在这里插入图片描述

参考

word插入超链接
examples
python-docx文档
pypi python-docx

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

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

相关文章

2024高交会-2024深圳高新技术展-高新技术成果交易会

2024高交会-2024深圳高新技术展-2024高新技术成果展-中国高校技术交易会-第26届高交会-深圳高交会-深圳高科技展-深圳新科技展-深圳高新技术成果展 第二十六届中国国际高新技术成果交易会(简称高交会) 时间:2024年11月15日-19日 地址&#…

python+Flask+django企业仓库进销存管理信息系统35wiz

Flask提供了更大的灵活性和简单性,适合小型项目和微服务。Django则提供了更多的内置功能,适合大型项目。Flask让开发者更多的控制其组件,而Django则遵循开箱即用的原则 本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&am…

YOLOv8 推理脚本--置信度保留多位浮点数 特征图可视化

效果 特征图可视化: 4位浮点数: 原始2位浮点数4位浮点数推理 --detect.py 说明 在进行改动前,请大家先阅读下 基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95 ,确保会用我给的推理脚本。 YOLO( ):…

【C++】STL--stackquene

这一节主要学习stack、quene和priority_quene的使用以及模拟实现,最后介绍了容器适配器。 目录 stack的介绍和使用 stack的介绍 stack的使用 stack的模拟实现 queue的介绍和使用 queue的介绍 queue的使用 queue的模拟实现 priority_queue的介绍和使用 pri…

【漏洞复现】潍微科技-水务信息管理平台 ChangePwd SQL注入漏洞

0x01 产品简介 潍微科技-水务信息管理平台主要帮助水务企业实现水质状态监测、管网运行监控、水厂安全保障、用水实时监控以及排放有效监管,确保居民安全稳定用水、环境有效保护,全面提升水务管理效率。 0x02 漏洞概述 潍微科技-水务信息管理平台 ChangePwd 接口存在SQL注…

训练营第二十天(二叉树 part06)

训练营第二十天(二叉树 part06) 654.最大二叉树 力扣题目地址(opens new window) 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出…

sed 字符替换时目标内容包含 特殊字符怎么处理

背景 想写一个自动修改配置的脚本,输入一个 mysql jdbc 的连接路径,然后替换目标配置中的模版内容,明明很简单的一个内容,结果卡在了 & 这个符号上。 & 到底是什么特殊字符呢?结论:它代表要替换的…

【中级软件设计师】上午题08-UML(上):类图、对象图、用例图

上午题08-UML 1 UML事物2 UML关系2.1 依赖2.2 关联2.2.1 聚合 (空心菱形)2.2.2 组合 (实心菱形) 2.3 泛化 (实线三角形)2.4 实现 (虚线三角形)2.5 关联多重度 3 类图4 对象图5 用例图…

vue3 + potree 渲染点云数据记录

potree 官网示例 前置条件: potree 无法直接加载 LAS,LCD,PLY等格式的点云文件, 需要通过 PotreeConverte 转换为 octree 数据格式,前端渲染中加载转换后的 json 格式 格式转换方向 .las ---- potreeConverter ----> .json…

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…

关于无人机,你必须知道的事!!(科技篇)

飞行器的五脏六腑 电机:无人机的动力单元,俗称“马达”。通过电机转动来驱动螺旋桨旋转,最终让飞机上天。 电调:无人机的动力单元,是接收油门信号并调整电机转速的控制枢纽,俗称电机的“黑屋调教师” 飞…

探索计算机的小数世界:从二进制到无限精度

前言 不知道你是否和我一样,遇到这个情况。在刚开始学习编程。计算0.3-0.20.1这个小学都知道,但是如果你在计算机执行,发现结果并不是0.1 。这个时候会疑问到底是为什么呢。 System.out.println("0.3-0.2"(0.3-0.2)); 0.3-0.20.09…

API管理平台:你用的到底是哪个?

Apifox是不开源的,在github的项目只是readme文件,私有化需要付费。当然saas版目前是免费使用的。 一、Swagger 为了让Swagger界面更加美观,有一些项目可以帮助你实现这一目标。以下是一些流行的项目,它们提供了增强的UI和额外的功…

OSCP靶场-- Sybaris

OSCP靶场–Sybaris 考点(redis MODULE LOAD命令执行) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.93 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-11 04:24 EDT Nmap scan report for 192.168.158.93…

照片转漫画的软件有吗?分享4款热门的软件!

在数字化时代,我们总是追求新鲜、有趣、创意十足的方式来展现自我。其中,将普通照片转化为漫画风格的图像已成为许多年轻人的新宠。这种既能保留原照片中的人物特征,又能赋予其独特艺术气息的方式,让许多人趋之若鹜。那么&#xf…

PHP7垃圾回收算法

前提 本文为了梳理PHP GC工作流程,所以从引用计数、部分标记清除算法做引子,然后介绍PHP GC工作流程,最后介绍性能更高的GC算法 引用计数 概述 引用计数算法中引入了一个概念计数器。计数器代表对象被引用的次数 基本原理 为了记录一个对象有没有被…

微信公众号第三方平台-公众号扫码授权接入代运营

文章目录 接入目的效果展示技术积累如何成为服务商如何搭建第三方后端服务传统模式V云服务模式如何完成商家授权授权逻辑介绍 环境准备注册开发者平台-个人类型 传统模式后端代码接收公众号个人三方平台的票据根据票据获取三方平台访问令牌根据访问令牌获取预授权码通过预授权码…

OJ 【难度1】【Python】完美字符串 扫雷 A-B数对 赛前准备 【C】精密计时

完美字符串 题目描述 你可能见过下面这一句英文: "The quick brown fox jumps over the lazy dog." 短短的一句话就包含了所有 2626 个英文字母!因此这句话广泛地用于字体效果的展示。更短的还有: "The five boxing wizards…

网络——初识网络

在现如今,网络已经成了一种基础设施,大到国家,小到个人,网络已经充斥在我们每个人的身 边,如果一个人突然失去了网络,那么它的生活或多或少会出现一些不方便的地方,网络现在已 经伴随着我们的吃…

Solana主网使用自定义的RPC进行转账

1、引言 如果用 browser 连接主网的 RPC server 会收到 error code 403 message 為 Access forbidden, contact your app developer or supportrpcpool.com. 错误,因为主网的 RPC server 会检查 HTTP Header 如果判断出來是 browser 就会报告 403 錯誤。 要解決这…