一、基础内容

安装第三方库的时候安装:python-docx

from docx import Document

Pt - 像素、Cm - 厘米、Inches - 英寸

from docx.shared import Pt, Cm, Inches, RGBColor

1. 基本概念

1)Document对象(文档对象) - 代表一个word文件

2)heading(标题)

3)paragraph(段落) - 一段文字

4) run - 多个run可以拼成一个段落,不同的run可以单独设置不同的样式

5)table(表格) - 多行多列的表格

6)picture(图片) - 文档中插入的图片

2. 操作word文档

1)创建空的word文档

doc = Document()

2) 添加标题

Document对象.add_heading(标题内容,level=1)

level的取值范围是:1 ~ 9,如果是0表示普通段落

h1 = doc.add_heading('数据分析报告', level=1)      # 添加一个一级标题

3)添加段落

Document对象.add_paragraph(段落内容)

3.1 直接添加整个段落文字 ```python

p1 = doc.add_paragraph('此次调研数据主要通过问卷发放的形式获取,在紫金港全校范围内开展。样本数据通过简单随机抽样和分层抽样相结合的方法,进行相对广泛的数据采集与调研,选取的样本量较大,获得的数据客观真实。以下为具体的数据分析结果:')

h2 = doc.add_heading('一、总体情况', level=2)

3.2 分段添加段落问题

段落对象.add_run(内容)

p2 = doc.add_paragraph('共发放问卷:')
run = p2.add_run('320 份')
run.font.color.rgb = RGBColor(255, 0, 0)

p3 = doc.add_paragraph()
run1 = p3.add_run('回收问卷: ')
run2 = p3.add_run('296 份')
run3 = p3.add_run(',回收率')
run4 = p3.add_run('92.5%')

添加分页(换页)

doc.add_page_break()


h3 = doc.add_heading('二、样本代表性', level=2)

h4 = doc.add_heading('(一)性别:分布', level=3)

4) 添加表格

Document对象.add_table(行数, 列数)

table = doc.add_table(3, 3, style="Light Grid")    # 'Medium Grid'
table.cell(0, 0).text = '性别'
table.cell(0, 1).text = '人数'
table.cell(1, 0).text = '男'

5)添加图片

doc.add_paragraph()

如果添加图片的时候没有设置宽高,图片按照原图大小显示

doc.add_picture('files/img1.png', width=Cm(13))
doc.add_picture('files/liubei.jpg', width=Cm(13))

保存word文档

doc.save('files/demo1.docx')

二、单独设置内容样式

from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

doc = Document()

1. 字体相关样式

1.1 标题相关样式

h1 = doc.add_heading(level=1)
run = h1.add_run('数据分析报告')

设置标题的字体大小

h1.style.font.size = Pt(25)

设置文字颜色

h1.style.font.color.rgb = RGBColor(97, 197, 84)

文字居中(CENTER、LEFT、RIGHT)

h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

设置字体名称(标题的字体名称不能直接设置到标题对象上的,需要设置到提供内容的run对象上)

run.font.name = '楷体'

注意:英文字体对应的字体名可以直接设置; 如果是中文字体名称,必须加上下面这段代码才会有效

注意:中文字体,必须先使用,再设置有效性

from docx.oxml.ns import qn
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'), '楷体')


h1 = doc.add_heading(level=2)
run = h1.add_run('hello world!')
run.font.name = 'Arima Koshi'

1.2 段落相关样式

p1 = doc.add_paragraph('此次调研数据主要通过问卷发放的形式获取,在紫金港全校范围内开展。样本数据通过简单随机抽样和分层抽样相结合的方法,进行相对广泛的数据采集与调研,选取的样本量较大,获得的数据客观真实。以下为具体的数据分析结果:')

注意:如果直接设置段落对象相关样式,样式会作用于整个文档中所有的段落

p1.style.font.size = Pt(15) # 设置字体大小
p1.style.font.color.rgb = RGBColor(75, 0, 130) # 设置字体颜色
p1.style.font.bold = True # 是否加粗
p1.style.font.italic = True # 是否倾斜
p1.style.font.name = ‘宋体' # 设置字体名称
r = p1.style._element.rPr.rFonts
r.set(qn(‘w:eastAsia'), ‘宋体')

p1.style.font.underline = True # 添加下划线
p1.style.font.strike = True # 添加中划线(删除线)
p1.style.font.shadow = True # 添加阴影效果

1.3 间距相关样式

注意:间距相关样式,只会作用于当前段落对象

p1.paragraph_format.line_spacing = 1.5          # 设置行间距
p1.paragraph_format.space_before = Pt(120)      # 段前间距
p1.paragraph_format.space_after = Pt(120)       # 段后间距
p1.paragraph_format.first_line_indent = Pt(30)  # 首行缩进

h2 = doc.add_heading('一、总体情况', level=2)

1.4 通过run添加样式

p2 = doc.add_paragraph('共发放问卷:')

p2.style.font.bold = True

run = p2.add_run('320 份')
run.font.color.rgb = RGBColor(255, 0, 0)


p3 = doc.add_paragraph()
run1 = p3.add_run('回收问卷: ')
run1.font.bold = True

run2 = p3.add_run('296 份')
run2.font.size = Pt(18)

run3 = p3.add_run(',回收率')
run3.font.italic = True

run4 = p3.add_run('92.5%')
run4.font.color.rgb = RGBColor(0, 0, 200)

print(p3.runs)

h3 = doc.add_heading('二、样本代表性', level=2)

段落对象.runs - 获取构建整个段落的所有的run对象, 返回列表

直接创建段落对象的时候,会自动在段落中创建段落内容对应的run对象

p4 = doc.add_paragraph('通过最终问卷统计情况来看,此次问卷发放充分考虑到性别、专业大类以及年级的分布情况,样本分布合理,所选取的样本具有相对的典型性与代表性,可以以此为样本进行总体的推断统计以及之后的相关分析。样本具体分布情况如下:')
p4.runs[0].font.size = Pt(15)
p4.runs[0].font.color.rgb = RGBColor(70, 130, 180)
p4.runs[0].font.underline = True


h4 = doc.add_heading('(一)性别:分布', level=3)
table = doc.add_table(3, 3)
table.cell(0, 0).text = '性别'
table.cell(0, 1).text = '人数'
table.cell(1, 0).text = '男'

doc.add_paragraph()
doc.add_picture('files/img1.png', width=Cm(13))
doc.add_picture('files/liubei.jpg', width=Cm(13))

doc.save('files/demo2.docx')

三、样式演示

from docx import Document
from docx.enum.style import WD_STYLE_TYPE

doc = Document()

# 1.获取所有已经写好的主题样式
styles = doc.styles
for s in styles:
    print(s)

print('------------------------------------------华丽的分割线------------------------------------------------')

# 2. 字符样式  -  设置在run对象上的样式
doc.add_heading('===========1.所有的字符样式名和对应的效果============')
# 获取所有字符相关的样式的名称和显示效果
p1 = doc.add_paragraph()
for s in styles:
    # Character
    if s.type == WD_STYLE_TYPE.CHARACTER:
        run = p1.add_run(f'字符样式名称: {s.name}\n', style=s)

# 使用方法:
p2 = doc.add_paragraph()
p2.add_run('Hello World!', style='Intense Reference')

print('------------------------------------------华丽的分割线------------------------------------------------')
# 3. 段落样式   -   设置在段落对象上的样式
doc.add_heading('===========2.所有段落样式名和对应的效果============')
for s in styles:
    if s.type == WD_STYLE_TYPE.PARAGRAPH:
        doc.add_paragraph(f'段落样式名称:{s.name}', style=s)

doc.add_paragraph('hello world!', 'Title')

print('------------------------------------------华丽的分割线------------------------------------------------')
# 4. 表格样式   -   设置在表格对象上的样式
for s in styles:
    if s.type == WD_STYLE_TYPE.TABLE:
        doc.add_paragraph(f'表格样式名称:{s.name}')
        doc.add_table(3, 3, style=s)
        doc.add_paragraph('\n')

doc.add_table(5, 4, style='Medium Grid 1 Accent 4')


doc.save('files/demo3.docx')

四、制作表格

from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT

表格基本概念:table(表格)、row(行)

doc = Document()

1. 表格

1.1创建一个表格

table = doc.add_table(3, 3, style="Light Shading Accent 4")
table.cell(2, 0).text = 'abc'
table.cell(0, 0).text = '姓名'
table.cell(0, 1).text = '年龄'
table.cell(0, 2).text = '分数'
table.cell(1, 1).text = '19'
table.cell(1, 3).text = '你好'

1.2添加行列

table.add_row()     # 在最下面添加一行
table.add_column(Pt(100))  # 在最右边添加一列

1.3 设置表格样式

设置表格样式,会作用于整个表格中所有的单元格

table.style.font.size = Pt(15)
table.style.font.color.rgb = RGBColor(223, 178, 56)
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

2.行列对象

print(table.rows)       # 获取所有的行(返回一个容器,容器中的元素是所有的行对象)
print(table.columns)    # 获取所有的列

遍历获取所有的行

for row in table.rows:
    # 获取指定行所有的单元格
    print(row.cells)
    # 获取指定行的高度
    print(row.height)
    # 获取指定行的下标(下标值从0开始)
    print(row._index)
    # 修改每一行的高度
    # row.height = Pt(50)

    # 单独设置指定行的高度
    if row._index == 0:
        row.height = Pt(50)
    print('------------------------------------------华丽的分割线------------------------------------------------')

3. 单元格对象

3.1获取单元格

cell1 = table.cell(0, 0)
cell2 = table.cell(0, 1)
cell3 = table.cell(1, 1)
cell4 = table.cell(2, 2)
cell5 = table.cell(1, 2)

3.2修改单元格内容

cell1.text = 'Name'
cell4.text = '98分'

print(cell5.paragraphs)     # [<docx.text.paragraph.Paragraph object at 0x7f81e012a490>]
p = cell5.paragraphs[0]
r1 = p.add_run('100')
r2 = p.add_run('分')
r2.font.color.rgb = RGBColor(255, 0, 0)

3.3 合并单元格(只能列合并)

cell11 = table.cell(3, 1)
cell22 = table.cell(3, 2)
cell33 = table.cell(3, 3)
cell11.merge(cell22)
cell11.merge(cell33)

3.4 设置单元格样式

设置垂直对齐方式(TOP、BOTTOM、CENTER)

cell1.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER

p1 = cell1.paragraphs[0]
run1 = p1.runs[0]

设置字体

run1.font.color.rgb = RGBColor(200, 10, 10)
run1.font.size = Pt(20)

设置水平对齐方式(LEFT\RIGHT\CENTER)

p1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
​​​​​​​
doc.save('files/demo4.docx')

到此这篇关于Python利用docx模块实现快速操作word文件的文章就介绍到这了,更多相关Python docx操作word内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python利用docx模块实现快速操作word文件的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. ios5 – 什么是docx文件的统一类型标识符

    阅读DeveloperLibrary的文档,doc的标识符为“com.microsoft.word.doc”.但是什么是docx的标识符?解决方法标识符是org.openxmlformats.wordprocessingml.document.

  3. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  4. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  5. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  8. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  9. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  10. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部