装置Python-docx

docx 并非 Python 的规范库,属于第三方扩大,咱们通过 pip 命令装置:

pip install python-docx

如果因为网络或者其余起因导致 pip 无奈失常装置

请拜访 https://pypi.org/project/python-docx/
手动下载压缩文件并解压后装置

tar xvzf python-docx-{version}.tar.gzcd python-docx-{version}python setup.py install

疾速开始

新建文档

from docx import Documentdocument = Document()

这一步十分繁难,咱们申明一个 Document 对象,如果不传入docx文档门路的话,默认
关上一个新的空白文档

这种应用缺省参数调起文档对象的形式大大简化了
咱们的代码量,变得更加简略

保存文档

from docx import Documentdocument = Document()document.save("./nihao.docx")

save 办法用于保留 docx 文档

尝试写入题目和内容

增加题目

from docx import Documentdocument = Document()document.add_heading('公开交通站')document.add_heading('鼎香楼', level=2)# document.save("./公开交通站.docx")

进入源码查看 add_heading 办法

def add_heading(self, text="", level=1):    """Return a heading paragraph newly added to the end of the document.    The heading paragraph will contain *text* and have its paragraph style    determined by *level*. If *level* is 0, the style is set to `Title`. If *level*    is 1 (or omitted), `Heading 1` is used. Otherwise the style is set to `Heading    {level}`. Raises |ValueError| if *level* is outside the range 0-9.    """    if not 0 <= level <= 9:        raise ValueError("level must be in range 0-9, got %d" % level)    style = "Title" if level == 0 else "Heading %d" % level    return self.add_paragraph(text, style)

能够看到 add_heading 办法接管了两个参数,
text参数是题目文本,而level是等级大小,默认是 一级题目

增加段落

段落是 docx 文档中最次要块级对象,用于写入注释、图片、表格等等

paragraph = document.add_paragraph('贾贵本来是安丘城的一个地痞流氓')

应用 add_paragraph 办法咱们能够写入段落内容,
然而咱们更多的是想给内容指定一些款式,自定义一些格调。

python-docx反对大部分原生 docx 的文本款式
,诸如对齐形式、缩进、行间距、字体大小,字体格调,色彩等等

比方咱们筹备了一份公开交通站的经典语录

我捂着脸撅起屁股就和他打起来了。二十年后老子又是一条好汉……奸。老子他妈明天不打人,老子明天他妈打你。一流氓二土匪日本鬼子宪兵队,警备队侦缉队亲生儿子维持会。建设王道乐土须要牲口,保护新秩序更须要牲口 总之皇军和牲口是不能离开的。 皇军会把牲口当成本人的兄弟。我就晓得那姑娘长的嘿。你滴宝刀大大滴好,我滴,要了。你滴办公桌大大滴好,我滴,这里办公。你滴老婆大大滴丑陋,我滴……真是天下汉奸个别蠢。对对对,我就是那狗屁贾队长。

咱们将其写入一段注释段落并加以润饰

from docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.shared import Pt, RGBColorfrom docx.oxml.ns import qndocument = Document()# 全局指定字体document.styles['Normal'].font.name = u'.萍方-简'document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'.萍方-简')header = document.add_heading('公开交通站',level=2)# 设置题目对齐形式为居中对齐header_format = header.paragraph_formatheader_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERtext = '''我捂着脸撅起屁股就和他打起来了。二十年后老子又是一条好汉……奸。老子他妈明天不打人,老子明天他妈打你。一流氓二土匪日本鬼子宪兵队,警备队侦缉队亲生儿子维持会。建设王道乐土须要牲口,保护新秩序更须要牲口 总之皇军和牲口是不能离开的。 皇军会把牲口当成本人的兄弟。我就晓得那姑娘长的嘿。你滴宝刀大大滴好,我滴,要了。你滴办公桌大大滴好,我滴,这里办公。你滴老婆大大滴丑陋,我滴……真是天下汉奸个别蠢。对对对,我就是那狗屁贾队长。'''# 申明一个段落paragraph = document.add_paragraph()# 设置对齐形式为居中对齐paragraph_format = paragraph.paragraph_formatparagraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 设置一个块对象run = paragraph.add_run(text)# 设置字体大小和色彩run.font.size = Pt(7)run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9) # RGB document.save("./公开交通站.docx")

做了什么

  • document 对象中设置了全局字体,留神: 如果是docx不自带的字体格调,须要自行下载字体到本地以供选择
  • 设置了一个二级题目
  • 通过 paragraph_format 属性设置了对齐形式
  • 通过 add_run 增加块元素并插入筹备好的文本
  • 设置了注释内容的字体大小和色彩
  • 保存文档

文档成果如下

插入图片

from docx.shared import Inchesdocument.add_picture('./盛世美颜贾队长.png', width=Inches(1.0))

通过 add_picture 办法增加一张本地图片到文档,
默认docx 库不反对解析增加在线图片地址。

所以如果咱们想要增加在线图片的话能够
先通过获取该图片的二进制流内容,再通过 add_picture 办法增加到文档中

import requests,iofrom docx.shared import Inchesurl = 'https://www.easyicon.net/api/resizeApi.php?id=1311353&size=128'io_url = io.BytesIO(requests.get(url).content)# 增加一张图片document.add_picture(io_url, width=Inches(1.0))

插入表格

docx文档中是能够插入和操作表格的

table = document.add_table(rows=2, cols=2)

应用 add_table 办法增加了一个表格,咱们试着通过表格的一些属性和办法来操作单元格

cell = table.cell(0, 1)cell.text = '嘿,打起来了嘿'

.text 属性能够给单元格赋值 (赋值或批改)

  • 0 示意第一行
  • 1 示意第二列
这里表格的行和列索引都是从0开始的

指定写入行的单元格,通过 rows 属性指定某一行或某些行。而后通过行的 cells 属性给单元格赋值

row = table.rows[2]row.cells[0].text = '前几天最热的时候咱们家热的快炸了'row.cells[1].text = '那你开空调啊'
  • 2 示意指定了表格中的第 3
  • 0 示意写入了该行的第 1
  • 1 示意写入了该行的第 2

通过 len 函数获取表格中行和列的总数

row_count = len(table.rows)col_count = len(table.columns)

逐渐增加行和列

当咱们无奈确定目前文档表格的行数时,能够抉择实时增加行或列,
这样能够灵便管制表格的长度和宽度,缩小不必要的空行或空列

比方咱们不晓得数据列表的长度或是须要实时增加行操作,
参考以下代码

items = [    {"name":"贾贵","desc":"侦缉队队长","createDate":"2021-04-20"},    {"name":"黄金标","desc":"警备队队长","createDate":"2021-04-21"},    {"name":"黑藤","desc":"间谍机关长","createDate":"2021-04-22"},    {"name":"孙友福","desc":"鼎香楼掌柜","createDate":"2021-04-23"},    {"name":"水根","desc":"鼎香楼大伙计","createDate":"2021-04-24"}]# 增加表table = document.add_table(1, 3)table.style='Medium Grid 1 Accent 1'# 表头heading_cells = table.rows[0].cellsheading_cells[0].text = '名字'heading_cells[1].text = '职务'heading_cells[2].text = '创立工夫'for item in items:    cells = table.add_row().cells    cells[0].text = item["name"]    cells[1].text = item["desc"]    cells[2].text = item["createDate"]
  • 增加了一个 13 列的表格,作为增加表头
  • 为表格增加一点款式 Medium Grid 1 Accent 1
  • 应用 add_row 办法动静增加行操作
对于表格款式列表能够参考 https://www.cnblogs.com/AbnerLc/p/13375707.html

咱们还能够通过 len(items[0]) 失去 items 列表中字典的长度来作为列的长度

# 增加表table = document.add_table(1, len(items[0]))

页眉和页脚

有时候咱们会给文档增加页眉和注脚

增加页眉

document = Document()section = document.sections[0]header = section.headerparagraph = header.paragraphs[0]paragraph.text = "鼎香楼"# paragraph.text = "左对齐文本\t居中文本\t右对齐文本"paragraph.style = document.styles["Header"]

申明一个 section 并应用 header 属性为文档增加页眉

增加页脚

footer = section.footerparagraph = footer.paragraphs[0]# 居中显示paragraph.text = "\t来自公开交通站\t"

只需将 header 换成 footer,为文档增加页脚

这里只是列举了 python-docx 库的一些罕用性能,
更多的文档款式和应用办法读者能够应用 python-docx 的官网文档
https://python-docx.readthedocs.io

祝你有个好情绪 !!