python操作docx文档

关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很出名的一个工具"pandoc,下面我会对他们各自进行介绍。

  1. 首先便是python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题、样式等几乎所有的word文档中能常用的功能都包含了,这个包的主要功能便是用来创建文档,相对来说用来修改功能不是很强大,关于文档请查看他的"官网;
  2. 再然后便是python-docx-template这个包了,他可以用来对docx文档进行修改,诸如对文档中的 文本、图片、富文本、等几乎所有存在与文档中的他都能替换,而且他操作起来就如同很多web框架中的模板语言一样,因为他是和jinjia2模板语言结合使用的,所以最好希望使用之前对模板语言有一定了解;
  3. 关于pandoc,这个包在许多需要进行文本转换的地方用处很强大,他可以把许多如今存在的文档格式转换问另一种文档格式,如html、markdown、docbook、latex、docx等转换为xml、latex、markdown、pdf,总之很强大,这是官网,有兴趣的可以去了解下。

下面便会相应介绍他们各自的大概的用法。还是按照上面的顺序进行介绍,

  • 关于python-docx这个包我觉得最好还是引用他官网的一段代码解释最为合适了,因为这里面基本情况都被包含了,

  1. from docx import Document
  2. from docx.shared import Inches
  3. document = Document()  # 首先这是包的主要接口,这应该是利用的设计模式的一种,用来创建docx文档,里面也可以包含文档路径(d:\\2.docx)
  4. document.add_heading('Document Title', 0)  # 这里是给文档添加一个标题,0表示 样式为title,1则为忽略,其他则是Heading{level},具体可以去<a href="https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html" target="_blank">官网</a>查;
  5. p = document.add_paragraph('A plain paragraph having some ') # 这里是添加一个段落
  6. p.add_run('bold').bold = True   # 这里是在这个段落p里文字some后面添加bold字符
  7. p.add_run(' and some ')
  8. p.add_run('italic.').italic = True
  9. document.add_heading('Heading, level 1', level=1)   # 这里是添加标题1
  10. document.add_paragraph('Intense quote', style='IntenseQuote') # 这里是添加段落,style后面则是样式
  11. document.add_paragraph(
  12. 'first item in unordered list', style='ListBullet'    # 添加段落,样式为unordered list类型
  13. )
  14. document.add_paragraph(
  15. 'first item in ordered list', style='ListNumber'    # 添加段落,样式为ordered list数字类型
  16. )
  17. document.add_picture('monty-truth.png', width=Inches(1.25))  # 添加图片
  18. table = document.add_table(rows=1, cols=3)   # 添加一个表格,每行三列
  19. hdr_cells = table.rows[0].cells   # 表格第一行的所含有的所有列数
  20. hdr_cells[0].text = 'Qty'    # 第一行的第一列,给这行里面添加文字
  21. hdr_cells[1].text = 'Id'
  22. hdr_cells[2].text = 'Desc'
  23. for item in recordset:
  24. row_cells = table.add_row().cells   # 这是在这个表格第一行 (称作最后一行更好) 下面再添加新的一行
  25. row_cells[0].text = str(item.qty)
  26. row_cells[1].text = str(item.id)
  27. row_cells[2].text = item.desc
  28. document.add_page_break()    # 添加分页符
  29. document.save('demo.docx')  # 保存这个文档

具体样式请看:

关于更多细节希望大家还是去他的官网python-docx;看,介绍的还是很详细

  • 然后便是python-docx-template包了,他用起来就向python中的模板语言一样,有上下文,有模板,然后进行变量的替换

关于python-docx-template,他的官网名称便是“像jinjia2一样来操作docx文档”,因此这个包对于用来进行文档修改时很强大的下面是一个简单例子:

  1. from docxtpl import DocxTemplate
  2. doc = DocxTemplate("1.docx")  # 对要操作的docx文档进行初始化
  3. context = { 'company_name' : "World company" }   # company_name 是存在于1.docx文档里面的变量,就像这样{{company_name}},直接放在1.docx文件的明确位置就行
  4. doc.render(context)   # 这里是有jinjia2的模板语言进行变量的替换,然后便可以在1.docx文档里面看到{{company_name}}变成了World company
  5. doc.save("generated_doc.docx")   # 保存
  6. 当然,这个包的功能远远不止上面例子中的一些,可以包含图片
  7. myimage = InlineImage(doc,'test_files/python_logo.png',width=Mm(20)) # tpl便是上面例子中的doc对象
  8. 也可以包含另一个docx文档,
  9. sub = doc.new_subdoc()
  10. sub.subdocx = Document('d:\\2.docx')
  11. doc.render({'sub': sub})

这里操作之后便可以把2.docx文件里面的内容直接插入到doc对象(也就是1.docx)文档中{{sub}}这个变量处,被替换为2.docx中的,基本上用到的都是这两个部分,

关于更多的特性,可以访问官网的example,里面涵盖了几乎所有的特性,地址是https://github.com/elapouya/python-docx-template/tree/master/tests

  • 最后便是pandoc了,我在这次用到的功能主要是,用来把html文件直接转换为markdow格式文件,然后再转换为txt文件,最后将txt文件内容和格式一同插入到docx文档中,当然,也可以直接把html文件转换为docx文件,格式基本一致

这是用到的命令,而由于使用pandoc是在控制台下cmd或者shell使用的,因此要用到python的另一个包subprocess

  1. import subprocess
  2. subprocess.call('pandoc --latex-engine=xelatex temp.html -o temp.text', cwd='d:\\python', shell=True)
  3. subprocess.call('pandoc --latex-engine=xelatex temp.text -o t1.text', cwd='d:\\python', shell=True)

或者

  1. <span style="background-color:rgb(153,153,255);">subprocess.call('pandoc temp.html -o temp.docx', cwd='d:\\python', shell=True)</span>

首先里面的cwd参数设置后,会把这个命令执行环境调到cwd所设置的参数路径处,就如同执行命令前,如同先执行了 cd d:\\python命令一样,shell=True相当于新开了一个shell或者cmd控制台,而关于更多例子,可以去官网的在线转换器https://pandoc.org/try/ 或者官网的例子https://pandoc.org/demos.html

python操作docx文档(转)的更多相关文章

  1. 利用Python操作Word文档【图片】

    利用Python操作Word文档

  2. 使用Python操作Excel文档(一)

    Python | 使用Python操作Excel文档(一) 0 前言 在阅读本文之前,请确保您已满足或可能满足以下条件: 请确保您具备基本的Python编程能力. 请确保您会使用Excel. 请确保您 ...

  3. python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

    首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...

  4. 用Python操作excel文档

    使用Python第三方库 这一节我们学习如何使用Python去操作Excel文档.如果大家有人不知道Excel的话,那么建议先学一学office办公基础.这里想要操作Excel,必须安装一个Pytho ...

  5. 使用PYTHON实现docx文档的读写

    经常写文章的小白们会遇到这样的问题,知道想表达的意思,想出了大概描述的词汇,但就是缺乏完整漂亮的句子,也许曾经在某个地方看到过,但是找不到了.另外一种情况,阅读了大量的报告,用的时候想到了其中的某个结 ...

  6. python 操作word文档

    因为工作需要操作一些word文档,记录一下学习思路 #-*- encoding: utf8 -*- import win32com from win32com.client import Dispat ...

  7. C# 操作docx文档

    一.需要引用DocX类库文件,可以直接在NuGet中找到. 二.创建文件,并添加一张表格 public static string fileName = AppDomain.CurrentDomain ...

  8. python 操作pdf文档

    简介 在实际项目中,我们有可能需要提取当中的部分内容并导出,给PDF文件添加水印,合并多份PDF文件等等,而本文会着重用到PyPDF2模块来玩转PDF文档,以及tabula模块来对PDF文档中的表格数 ...

  9. Python操作文件文档

    需要帮老师将44G的图书分类一下,人工当然累死了.所以用Python大法处理一下. 思路是读取文件目录下的书名,然后去百度百科查分类,如果还没有就去豆瓣,当当查.哪一个先找到其余的就不用找了.如果没有 ...

随机推荐

  1. 关于dyld: Library not loaded

    在接入智凡迪的sdk过程中,遇到以下问题: dyld: Library not loaded: @rpath/SDKFramework.framework/SDKFramework   Referen ...

  2. ubuntu安装依赖:0.8.1-1ubuntu4.4 正要被安装以及vm nested解决方法

    刚才在ubuntu10.04虚拟机上安装kvm,提示0.8.1-1ubuntu4.4 正要被安装,查了一下,有一种解决方法: 进入“系统->系统管理->更新管理器->设置”,在弹出的 ...

  3. softmax与logistic关系

    Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问 ...

  4. BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*

    BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ...

  5. C# 中那些可以被重载的运算符,以及使用它们的那些丧心病狂的语法糖

    C# 中的操作符重载并不新鲜.然而,到底有哪些操作符可以重载,重载操作符可以用来做哪些丧心病狂的事情呢? 本文收集了 C# 中所有可以重载的操作符,并且利用他们做了一些丧心病狂的语法糖.   可以重载 ...

  6. C++ set容器

    STL中的set容器的一点总结:(元素唯一,且排序) 1.关于set (头文件:<set>) C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, strin ...

  7. 《DSP using MATLAB》示例Example 8.3

  8. 关于fpga优化的set input delay 和 set output delay

    set input delay 和set output delay 首先必须明确的是指的外部delay,而非input或output的内部delay,那么这外部delay包含什么呢?包含1,外部路径延 ...

  9. riotjs 简单使用&&browserify 构建

    项目地址: http://riotjs.com/ 备注: 为了简单使用了 browserify 进行构建 1. 项目结构 ├── app.css ├── gulpfile.js ├── index.h ...

  10. bzoj 4407 于神之怒加强版——反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 \( ans = \sum\limits_{D=1}^{min(n,m)}\frac{ ...