Python处理word的常用操作详解

Python 处理 Word 文档通常使用 python-docx 库。以下是一些常用的操作和相应的代码示例:

这些是使用 python-docx 库处理 Word 文档时的一些常用操作。根据你的具体需求,可能还需要探索更多的功能和方法。在使用这些功能之前,请确保已经安装了 python-docx 库:

pip install python-docx
  1. 创建一个新的 Word 文档
    使用 Document 类可以创建一个新的 Word 文档。

    from docx import Documentdoc = Document()
    doc.add_paragraph('Hello, World!')
    doc.save('new_document.docx')
    
  2. 读取现有的 Word 文档
    使用 Document 类也可以打开现有的 Word 文档。

    doc = Document('existing_document.docx')
    for para in doc.paragraphs:print(para.text)
    
  3. 添加段落
    使用 add_paragraph 方法可以向文档中添加新的段落。

    doc.add_paragraph('This is a new paragraph.')
    
  4. 设置段落格式
    使用 Paragraph 对象的属性可以设置段落的格式。

    from docx.shared import Pt
    from docx.enum.text import WD_PARAGRAPH_ALIGNMENTpara = doc.add_paragraph('This is a centered paragraph.')
    para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    para.space_after = Pt(12)
    
  5. 添加文本到现有段落
    使用 add_run 方法可以向现有段落添加文本。

    para.add_run(' This is additional text in the same paragraph.')
    
  6. 设置字体样式
    使用 add_run 方法并设置 Run 对象的属性可以设置文本的样式。

    from docx.shared import RGBColorrun = para.add_run('This text is bold and italic.')
    run.bold = True
    run.italic = True
    run.font.color.rgb = RGBColor(255, 0, 0)  # Red color
    
  7. 添加图片
    使用 add_picture 方法可以向文档中添加图片。

    doc.add_picture('image.jpg', width=Inches(2.5))
    
  8. 添加表格
    使用 add_table 方法可以向文档中添加表格。

    table = doc.add_table(rows=2, cols=2)
    hdr_cell_width = Inches(4)
    for i in range(2):for j in range(2):cell = table.cell(i, j)cell.width = hdr_cell_widthcell.text = f'Row {i + 1}, Column {j + 1}'
    
  9. 设置页面布局
    使用 Section 对象可以设置页面布局。

    from docx.shared import Pt
    from docx.oxml.ns import qnsection = doc.sections[0]
    section.orientation = WD_ORIENTATION.PORTRAIT
    section.page_width = Pt(8.5)
    section.page_height = Pt(11)
    section.top_margin = Pt(1)
    section.bottom_margin = Pt(1)
    section.left_margin = Pt(1)
    section.right_margin = Pt(1)
    
  10. 保存文档
    使用 save 方法可以保存文档。

    doc.save('modified_document.docx')
    
  11. 遍历文档内容
    使用循环可以遍历文档中的所有段落、表格等。

    for element in doc.element.body:if isinstance(element, OxmlElement) and element.tag.endswith('p'):print(element.text)
    
  12. 替换文本
    使用 document.replace_text 方法可以替换文档中的文本。

    from docx.document import Document as _Document
    _Document.replace_text(doc.element.body, 'old_text', 'new_text')
    
  13. 添加页眉和页脚
    使用 headerfooter 属性可以添加页眉和页脚。

    header = doc.sections[0].header
    p = header.add_paragraph()
    p.add_run('This is the header.')footer = doc.sections[0].footer
    p = footer.add_paragraph()
    p.add_run('This is the footer.')
    
  14. 添加目录
    使用 add_table_of_contents 方法可以添加目录。

    doc.add_table_of_contents(title='Table of Contents')
    
  15. 添加页码
    使用 add_page_numbers 方法可以添加页码。

    doc.sections[0].footer.add_page_numbers()
    
  16. 添加超链接
    使用 add_hyperlink 方法可以添加超链接。

    para = doc.add_paragraph()
    run = para.add_run('This is a hyperlink.')
    run.add_hyperlink('http://www.example.com', 'Click here')
    
  17. 添加书签和交叉引用
    使用 add Bookmarkadd_cross_reference 方法可以添加书签和交叉引用。

    bookmark = doc.add_bookmark('myBookmark', doc.paragraphs[0])
    para = doc.add_paragraph('This is a reference to bookmark.')
    para.add_run().add_cross_reference('myBookmark')
    
  18. 设置文档属性
    使用 coreproperties 模块可以设置文档的元数据。

    from docx.opc.constants import RELATIONSHIP_TYPE as RT
    from docx.oxml.shared import qn
    from docx.oxml.ns import qnproperties = doc.core_properties
    properties.title = 'My Document'
    properties.subject = 'Python Docx'
    properties.author = 'Author Name'
    
  19. 设置段落样式
    使用预定义的样式可以快速设置段落的格式。

    from docx.shared import Pt
    from docx.enum.style import WD_STYLE_TYPEstyles = doc.styles
    heading_style = styles['Heading 1']
    para_style = styles['Normal']doc.add_paragraph('This is a heading.', style=heading_style)
    doc.add_paragraph('This is a normal paragraph.', style=para_style)
    
  20. 添加列表
    使用 add_list 方法可以向文档中添加有序或无序的列表。

    from docx.oxml.ns import qn
    from docx.oxml import OxmlElementlist_item_tags = (qn('w:p'), qn('w:r'), qn('w:t'))
    list_item = OxmlElement('w:p')
    list_item.text = 'List item text'run = list_item.xpath('.//'.join(list_item_tags))[0]
    run.rPr = OxmlElement('w:rPr')
    run.rPr.val = OxmlElement('w:numPr')
    run.rPr.val.add_namespacedecls({'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main','num': 'http://schemas.openxmlformats.org/wordprocessingml/2006/numbering'
    })
    doc.add_list_item(list_item)
    
  21. 添加页眉和页脚到所有页面
    使用 headerfooter 属性可以为文档的所有页面设置页眉和页脚。

    header = doc.sections[0].header
    header.add_paragraph('Header for all pages.')footer = doc.sections[0].footer
    footer.add_paragraph('Footer for all pages.')
    
  22. 设置文档的页边距
    使用 page_margins 方法可以设置文档的页边距。

    from docx.shared import Inchesfor section in doc.sections:section.left_margin = Inches(1)section.right_margin = Inches(1)section.top_margin = Inches(1)section.bottom_margin = Inches(1)
    
  23. 设置文档的分栏
    使用 set_landscape 方法和 set_evenly_spread 属性可以设置文档的分栏。

    for section in doc.sections:section.set_landscape(True)section.set_evenly_spread(True)section.column_count = 3
    
  24. 添加水印
    使用 add_watermark 方法可以向文档中添加水印。

    from docx.shared import Pt
    from docx.oxml.ns import qndoc.add_watermark('Confidential', font_size=Pt(18), color='gray')
    
  25. 添加文档的页码格式
    使用 add_page_numbers 方法可以设置文档的页码格式。

    from docx.shared import Ptfor section in doc.sections:page_number = section.footer.add_page_numbers()page_number.font.size = Pt(12)
    
  26. 添加文档的页码范围
    使用 add_page_numbers 方法可以设置文档的起始页码。

    from docx.shared import Ptfor section in doc.sections:page_number = section.footer.add_page_numbers(start=2)page_number.font.size = Pt(12)
    
  27. 添加文档的页码到页眉
    使用 add_run 方法可以向页眉中添加页码。

    for section in doc.sections:header = section.headerpara = header.paragraphs[0]run = para.add_run()run.add_text('Page ')run.add_page_number().rtl = True
    
  28. 添加文档的目录
    使用 add_table_of_contents 方法可以向文档中添加目录。

    doc.add_table_of_contents(title='Table of Contents', style='TOC Heading')
    
  29. 添加文档的交叉引用
    使用 add_cross_reference 方法可以向文档中添加交叉引用。

    bookmark = doc.add_bookmark('BookmarkName', doc.paragraphs[0])
    run = para.add_run()
    run.add_cross_reference('BookmarkName', 'Bookmark Text')
    
  30. 添加文档的脚注和尾注
    使用 add_footnoteadd_endnote 方法可以向文档中添加脚注和尾注。

    para = doc.add_paragraph('This is a paragraph with a footnote.')
    para.add_run('A footnote text.').add_footnote('This is the footnote text.')para = doc.add_paragraph('This is a paragraph with an endnote.')
    para.add_run('An endnote text.').add_endnote('This is the endnote text.')
    
  31. 添加文档的自定义属性
    使用 add_custom_xml_part 方法可以向文档中添加自定义 XML 属性。

    from docx.opc.custom_xml_part import CustomXmlPartcustom_xml = '<root><element key="value">Text</element></root>'
    part = docx.add_custom_xml_part(custom_xml)
    print(part.uri)
    
  32. 添加文档的大纲级别
    使用 outline_level 属性可以设置文档的大纲级别。

    para = doc.add_paragraph('This is a paragraph with outline level.')
    run = para.add_run('This is the run text.')
    run.outline_level = 1
    
  33. 添加文档的评论
    使用 add_comment 方法可以向文档中添加评论。

    from datetime import datetimecomment = doc.add_comment('Comment text', 'Comment Author', datetime.now())
    
  34. 添加文档的修订跟踪
    使用 add_paragraph 方法时设置 track_revisions 属性可以开启修订跟踪。

    doc.track_revisions = True
    para = doc.add_paragraph('This is a paragraph with revision tracking.')
    
  35. 添加文档的密码保护
    使用 protect 方法可以为文档添加密码保护。

    from docx.opc.constants import DOCUMENT_PROTECTION_TYPEdoc.protect(protection_type=DOCUMENT_PROTECTION_TYPE.FORM_FILLING)
    
  36. 修改文档的样式
    可以创建或修改样式,然后应用到文档的段落或文本上。

    from docx.shared import Pt
    from docx.enum.style import WD_STYLE_TYPEstyle = doc.styles.add_style('My Style', WD_STYLE_TYPE.PARAGRAPH)
    style.font.size = Pt(24)
    style.font.bold = True
    style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTERpara = doc.add_paragraph('This text uses my custom style.')
    para.style = 'My Style'
    
  37. 处理文档的节
    可以添加或修改文档的节(sections)来控制页面布局和格式。

    from docx.oxml.ns import qn
    from docx.oxml import OxmlElementnew_section = doc.add_section()
    new_section.start_type = WD_SECTION_START.NEW_PAGE
    new_section.page_width = Inches(8.5)
    new_section.page_height = Inches(11)
    
  38. 使用域代码
    可以插入和操作 Word 的域代码(field codes),例如插入时间或日期。

    from docx.enum.field import WD_FIELD_TYPErun = para.add_run()
    run.add_field('DATE', 'DATE \@ "MM/DDD/YYYY"', None)
    
  39. 处理文档的批注
    可以添加、编辑或删除文档的批注(comments)。

    from docx.oxml.ns import qn
    from docx.oxml.shared import qn as qn_
    from docx.oxml.xmlchemy import OxmlElementcomment_author = 'Author Name'
    comment_date = '2024-06-28T12:00:00'
    comment_text = 'This is a comment.'comment_elem = OxmlElement('w:comment')
    comment_elem.set(qn_('w:author'), comment_author)
    comment_elem.set(qn_('w:date'), comment_date)
    comment_elem.set(qn_('w:text'), comment_text)run = para.add_run()
    run.add_comment(comment_elem)
    
  40. 处理文档的修订
    可以添加、接受或拒绝文档的修订。

    from docx.shared import RGBColor
    from docx.enum.text import WD_COLOR_INDEXrun = doc.add_paragraph('This is a revised text.').add_run()
    run.bold = True
    run.revision_id = 1
    run.author = 'Author Name'
    run.date = '2024-06-28T12:00:00'
    run.revision_type = WD_REVISION_TYPE.INSERTION
    run.font.color.rgb = RGBColor(255, 0, 0)  # Red color
    
  41. 处理文档的大纲级别
    可以设置段落的大纲级别,用于创建目录。

    from docx.enum.list import WD_OUTLINE_LEVELpara = doc.add_paragraph('Heading 1')
    para.style = 'Heading 1'
    para_outline_level = para.paragraph_format-outline_level
    para_outline_level.val = WD_OUTLINE_LEVEL.LEVEL1
    
  42. 处理文档的超链接
    可以添加、编辑或删除文档的超链接。

    from docx.oxml.ns import qn
    from docx.oxml.shared import qn as qn_hyperlink = doc.add_hyperlink('http://www.example.com', 'Click here')
    hyperlink.rel = 'external'
    hyperlink.target_mode = 'External'
    
  43. 处理文档的自定义XML
    可以添加或修改文档的自定义XML部分。

    from docx.opc.custom_xml_part import CustomXmlPartcustom_xml = '<root><element key="value">Text</element></root>'
    custom_xml_part = docx.add_custom_xml_part(custom_xml)
    
  44. 处理文档的属性
    可以添加或修改文档的核心属性。

    from docx.shared import Pt
    from docx.opc.constants import RELATIONSHIP_TYPE as RTproperties = doc.core_properties
    properties.title = 'My Document'
    properties.subject = 'Python Docx'
    properties.author = 'Author Name'
    properties.last_modified_by = 'Author Name'
    properties.revision = 1
    properties.version = 1
    
  45. 处理文档的安全性
    可以设置文档的密码和加密类型。

    from docx.opc.package import Packagepackage = Package(doc.path)
    package.part_related_settings.restrict_edition = True
    package.part_related_settings.permit_form_filling = True
    package.save()
    

请注意,python-docx 库不支持所有 Word 功能,一些高级操作可能需要使用其他库或通过 Word 宏来实现。此外,某些操作可能需要对 OpenXML 格式有较深的理解。如果 python-docx 库的功能不能满足需求,可以考虑使用其他库,如 pywin32(仅限 Windows)来与 Word 应用程序进行交互。

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

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

相关文章

解释什么是lambda函数?它有什么好处?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深度解密Spark性能优化之道

课程介绍 课程通过实战案例解析和性能调优技巧的讲解&#xff0c;帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面&#xff0c;包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等&#xff0c;取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行&#xff08;…

【面试干货】Object 类中的公共方法详解

【面试干货】Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#…

报工计件工资核算h5开源版开发

报工计件工资核算h5开源版开发 小型计件工资管理系统&#xff0c;支持后台制定工价&#xff0c;核算工资。支持员工H5端报工&#xff0c;和查看工资情况。 H5手机端 支持在线报工&#xff0c;支持查看我的工资。 自定义费用项 在基础计件工资基础上增加扣除和增加项&#xff…

Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别

CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两种用于在应用程序启动后执行初始化代码的机制。这两种接口允许你在 Spring 应用上下文完全启动后执行一些自定义的代码&#xff0c;通常用于执行一次性初始化任务&#xff0c;如数据库预填充、缓存预热等。 Co…

基于Vue.js的电商前端模板:Vue-Dashboard-Template的设计与实现

摘要 随着电子商务的飞速发展&#xff0c;前端页面的设计和实现变得愈发重要。本文介绍了一个基于Vue.js的电商前端模板——Vue-Dashboard-Template&#xff0c;旨在提供一个高性能、易扩展的电商平台前端解决方案。该模板遵循响应式设计、模块化、组件化开发等设计原则&#…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案&#xff0c;且同样的元素不能被重复利用。比如&#xff1a;给定 nums [2, 7, 11, 15] 和 target 9&#xff0c;返回 [0, 1]&#xff0c;因…

c++指针和引用之高难度(一)习题讲解

1.【单选题】 int a { 5000 }; int* ptrA { &a }; a; *ptrA ? A 5000 B 5001 C 5002 解析&#xff1a;ptrA是指向变量a的内存地址&#xff0c;变量a&#xff0c;解引用ptrA的值也会变化&#xff0c;结果为5001。 2.【单选题】 int a { 5000 }; c…

Python爬虫开发实战,模拟登录与验证码处理

在Python爬虫的开发过程中,模拟登录和验证码处理是两个重要的环节。模拟登录可以帮助我们获取需要用户身份认证才能访问的数据,而验证码处理则是绕过网站反爬虫机制的关键步骤。本文将从实战角度出发,详细阐述Python爬虫中模拟登录和验证码处理的技术和策略。 一、模拟登录 …

axios二次封装(详细+跨域问题)

一&#xff0c;为什么要对axios进行二次封装&#xff1f;答&#xff1a;主要是要用到请求拦截器和响应拦截器;请求拦截器&#xff1a;可以在发请求之前可以处理一些业务响应拦截器&#xff1a;当服务器数据返回以后&#xff0c;可以处理一些事情 二&#xff0c;axios的二次封装…

WebSocket 心跳机制如何实现

是一种简单并且有效的策略&#xff0c;用于维持长链接的活跃状态&#xff0c;防止因为网络空闲或者不稳定因素&#xff0c;导致链接意外中断。通过周期性的心跳消息&#xff0c;确保了链接的持久性和周期性&#xff0c;是维持实时通信服务稳定运行的关键组件。 1. 定时发送心跳…

解决VSCode无法用ssh连接远程服务器的问题

原因&#xff1a; 因为windows自带的ssh无法连接远程服务器&#xff0c;需要用git底下的ssh.exe。 搜了很久&#xff0c;试过很多方法&#xff0c;包括替换掉环境变量中的ssh&#xff0c;但是都无效&#xff0c;最后发现是要在VSCode中配置需要使用哪个ssh.exe。 步骤&#…

Java学习 - 布隆过滤器

前置需求 需求 已经有50亿个电话号码&#xff0c;现在给出10万个电话号码&#xff0c;如何快速准确地判断这些电话号码是否已经存在&#xff1f; 参考方案 通过数据库查询&#xff1a;比如MySQL&#xff0c;性能不行&#xff0c;速度太慢将数据先放进内存&#xff1a;50亿*8字…

【环境配置】ubuntu中 Docker的安装

前言 Docker的使用&#xff0c;一直没有系统的梳理和记录&#xff0c;刚好最近看视频又再次的全面介绍到docker。于是记录下方便后面自己的使用&#xff0c;毕竟安装过程中还是会存在小的不丝滑。 1 Docker的简单介绍 这里的介绍来自于大模型的问答&#xff08;LLM时代的到来&a…

开启网络监控新纪元:免费可视化工具助力网络信息链路拓扑监控大屏

在数字化浪潮汹涌的今天&#xff0c;网络已成为我们生活、工作的不可或缺的一部分。然而&#xff0c;你是否曾经想过&#xff0c;在这个庞大的网络世界中&#xff0c;是谁在默默守护着每一条信息的传输&#xff0c;确保我们的数据安全、稳定地抵达目的地&#xff1f; 网络信息链…

第十二章:抽取式问答

本文我们将运用 Transformers 库来完成抽取式问答任务。自动问答 (Question Answering, QA) 是经典的 NLP 任务,需要模型基于给定的上下文回答问题。 根据回答方式的不同可以分为: **抽取式 (extractive) 问答:**从上下文中截取片段作为回答,类似于我们前面介绍的序列标注…

【力扣高频题】004.两个正序数组的中位数

------------------ 长文警告 ------------------ 4.两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O ( l o g ( m n ) ) O(log(mn)) O…

工业数据分析要用FusionInsight MRS IoTDB ?

随着工业互联网逐步兴起&#xff0c;在加速工业自动化、智能化的同时&#xff0c;也进一步加速工业生产时间序列数据的产生速度。但对于工业生产中的数据分析&#xff0c;仍然存在重复样本多&#xff0c;数据膨胀率大&#xff0c;缺乏专业易用的平台&#xff0c;这些问题成为阻…

【PYTHON】力扣刷题笔记 -- 0053. 最大子数组和【中等】

题目描述&#xff1a;给你一个整数数组 array: nums &#xff0c;请你找出一个具有最大和的连续子数组 sub-array&#xff0c;返回其最大和 子数组&#xff08;最少包含一个元素&#xff09;: 是数组中的一个连续部分 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1…