一、python-docx

python-docx是第三方库,第一次使用时需要安装,安装库名python-docx,导入模块名docx,可处理docx文档,不支持doc文档。

安装方法

pip install python-docx

导入方法

from docx import Document

常用单位转换函数

Pt—磅值、Mn—毫米、Cm—厘米、Inches—英寸(吋)、RGBColor—RGB颜色

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

1. 基本概念

1.1 Document对象(文档对象) ——代表一个word文件

1.2 heading(标题)

1.3 paragraph(段落)——一个段落(一段文字)

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

1.5 table(表格)——多行多列的表格

1.6 picture(图片)——文档中插入的图片

2. 操作word文档

2.1 创建空的word文档

doc = Document()

2.2 添加标题

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

level的取值范围是:1 ~ 9,如果是0表示大标题Title

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

2.3 添加段落

Document对象.add_paragraph(段落内容)

2.3.1 直接添加整个段落文字

p1 = doc.add_paragraph('段落文字置于此处')

h2 = doc.add_heading('一、主要景点', level=2)

2.3.2 分段添加段落问题

段落对象.add_run(内容)

p2 = doc.add_paragraph('总人数:')

run = p2.add_run('38人')

run.font.color.rgb = RGBColor(255, 0, 0)

p3 = doc.add_paragraph()

run1 = p3.add_run('其中优秀: ')

run2 = p3.add_run('5人')

run3 = p3.add_run(',优秀率')

run4 = p3.add_run('13.2%')

添加分页(换页)

doc.add_page_break()

h3 = doc.add_heading('二、配套设施', level=2)

h4 = doc.add_heading('(一)酒店', level=3)

2.4 添加表格

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

table = doc.add_table(3, 3, style="Light Grid")           # 3行3列表格

table.cell(0, 0).text = '景点'

table.cell(0, 1).text = '介绍'

table.cell(1, 0).text = '描述'

2.5 添加图片

doc.add_paragraph()

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

doc.add_picture(‘d:/三步两爿桥.png', width=Cm(13))   # 13厘米

doc.add_picture(‘d:/千年古银杏.jpg', width=Cm(13))

2.6 保存word文档

doc.save('文件名.docx')

二、单独设置内容样式

from docx import Document

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

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

doc = Document()

1. 标题字体相关样式

h1 = doc.add_heading(level=1)

run = h1.add_run('梅花洲景区介绍')

设置标题的字体大小

h1.style.font.size = Pt(25) # 设字体大小为25磅,1磅=1/72吋,1吋=2.54厘米

设置文字颜色

h1.style.font.color.rgb = RGBColor(97, 197, 84)          # RGB(97, 197, 84)è'#61c554'

文字对齐(CENTERLEFTRIGHTJUSTIFY)

h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

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

run.font.name = '楷体'

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

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

from docx.oxml.ns import qn

r = run._element.rPr.rFonts.set(qn('w:eastAsia'), '楷体')

h1 = doc.add_heading(level=2)

run = h1.add_run('hello world!')

run.font.name = 'Calibri'

2. 段落字体相关样式

p1 = doc.add_paragraph('段落文字置于此处')

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

p1.style.font.size = Pt(15)                 # 设置字体大小为15磅

p1.style.font.color.rgb = RGBColor(75, 0, 130)     # 设置字体颜色为'#4b0082'

p1.style.font.bold = True                   # 是否加粗,True加粗,False正常

p1.style.font.italic = True                  # 是否倾斜,True倾斜,False正常

p1.style.font.name = '宋体'             # 设置字体名称

r = p1.style._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')

p1.style.font.underline = True         # 添加下划线

p1.style.font.strike = True                 # 添加中划线(删除线)

p1.style.font.shadow = True            # 添加阴影效果

3. 间距相关样式

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

p1.paragraph_format.line_spacing = 1.5                      # 设置行间距(1.5倍)

p1.paragraph_format.space_before = Pt(12)              # 段前间距(12磅)

p1.paragraph_format.space_after = Pt(12)                  # 段后间距(12磅)

p1.paragraph_format.first_line_indent = Pt(30)         # 首行缩进(30磅)

注:不能直接设置2字符,2字符=字体大小*2(磅值)

h2 = doc.add_heading('二、配套设施', level=2)

4. 通过run添加样式

p2 = doc.add_paragraph('总人数:')

p2.style.font.bold = True

run = p2.add_run('38人')

run.font.color.rgb = RGBColor(255, 0, 0)

p3 = doc.add_paragraph()

run1 = p3.add_run('其中优秀: ')

run1.font.bold = True

run2 = p3.add_run('5人')

run2.font.size = Pt(18)

run3 = p3.add_run(',优秀率')

run3.font.italic = True

run4 = p3.add_run('13.2%')

run4.font.color.rgb = RGBColor(0, 0, 200)

print(p3.runs)

段落对象.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(‘d:/img1.png', width=Cm(13))

doc.add_picture(‘d:/liubei.jpg', width=Cm(13))

doc.save(‘文件名1.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 = '测试'

table.cell(0, 0).text = '姓名'

table.cell(0, 1).text = '课程'

table.cell(0, 2).text = '分数'

table.cell(1, 0).text = '张三'

table.cell(1, 1).text = 'Python程序设计'

table.cell(1, 3).text = '90'

1.2添加行列

table.add_row()                          # 在最下面添加一行

table.add_column(Pt(100))      # 在最右边添加一列(宽度100磅)

1.3 设置表格样式

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

table.style.font.size = Pt(15)    # 表格文字大小15磅

table.style.font.color.rgb = RGBColor(223, 178, 56)           # 颜色'#dfb238'。↓居中

table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

2.行列对象

print(table.rows)                         # 获取所有的行(返回所有的行对象)

print(table.columns)                  # 获取所有的列

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 = '95'

print(cell5.paragraphs)                              # 段落对象

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 设置单元格样式

设置垂直对齐方式(TOPBOTTOMCENTER)

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)

设置水平对齐方式(LEFTRIGHTCENTERJUSTIFY)

p1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT. JUSTIFY

四、实例:梅花洲景区介绍(文字、图片、表格)

##################################################
# 设计 Zhang Ruilin        创建 2020-05-03 22:10 #
#                          修订 2023-01-08 12:45 #
# Python-docx 模块生成 Word 文档,含标题、图文表 #
##################################################
from docx import Document                   # docx是Python的Word模块,
from docx.shared import Pt                  # 第一次使用需安装Python-docx
from docx.shared import Inches
from docx.shared import Cm
from docx.oxml.ns import qn
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.enum.text import WD_ALIGN_PARAGRAPHdocument = Document()                     # 打开文档
# 加入不同等级的标题
document.styles['Normal'].font.name='楷体'           # 给段落(正文)设字休
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '楷体')
run=document.add_heading('',level=0).add_run('梅花洲景区介绍')
run.font.name='微软雅黑'                 # 给标题设字体
_title = document.styles['Title']                # level=0相当于styles['Title']
_title.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 标题居中
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
paragraph = document.add_paragraph('梅花洲,位于浙江嘉兴市南湖区凤桥镇。南朝定宋'\'永初三年时间石佛寺建于此,因形成五瓣状,其间草木葱郁、曲径通幽、大小'\'河流穿梭潆洄犹如梅花,故名梅花洲。已有1500多年历史。经历了15个世纪的'\'风雨沧桑,梅花洲地块河道肌理依旧保存完好,堪称奇迹。')   # 添加文本
paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY  # 两端对齐
paragraph.paragraph_format.first_line_indent =Pt(22)           # 首行缩进22磅
paragraph = document.add_paragraph('梅花洲,一个承载着灿烂文明的千年历史遗迹,因'\'大小河道曲折潆绕、纵横交错,将地势惟妙地分成五瓣,状若梅花,故有“梅花洲”'\'之名。景区距上海、杭州、苏州、宁波都只有百余里,具有得天独厚的区域位置。')
paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
paragraph.paragraph_format.first_line_indent =Pt(22)
run=document.add_heading('',level=1).add_run('1.主要景点')        # level=1~9为1~9级标题
run.font.name='黑体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
document.add_paragraph('石佛古刹钟声袅袅、余音不绝', style='List Number')
document.add_paragraph('千年银杏遗世独立', style='List Number')    # 增加有序列表
document.add_paragraph('香花廊桥流芳遗梦', style='List Number')
document.add_paragraph('粉墙黛瓦澜景亭亭,写尽了江南这一方盈水间千年不绝的韵味,再现'\'了三百年的中国情怀。', style='List Number')
run = document.add_heading('',1).add_run('2.配套设施')
run.font.name='黑体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
document.add_paragraph('梅洲酒店:景区配套建设的梅洲酒店是凤桥镇首家按四星级标准建造的'\'酒店,是集住宿、餐饮、会务、拓展、农业采摘等功能于一身的现代化酒店。',style='List Bullet')                 # 增加无序列表
document.add_paragraph('会议中心:梅花洲会议中心面积约3000平方米,拥有能同时容纳450人的'\'多功能厅一个、能容纳230人的大型会议室一个和中小型会议室各两个。',style='List Bullet')
document.add_paragraph('拓展培训:梅花洲拓展培训基地项目全面,涵盖所有拓展训练项目,包'\'括高空项目、场地项目、室内项目、定向项目和野外项目等。', style='List Bullet')
document.add_paragraph('农业基地:梅花洲农业基地位于景区北侧,占地面积400亩。基地内农作'\'物品种繁多,时刻为您准备着生机勃勃的田园风光,让您亲手垂钓、抓鸡、采摘,并为您'\'当场把战利品烹制成美味佳肴。', style='List Bullet')
document.add_paragraph('禅修中心:石佛寺立体禅修堂是亚洲最大的禅修中心之一,可同时容纳'\'400人进行禅修活动。', style='List Bullet')
document.add_paragraph('小镇生活:梅花洲,旧时的繁华集市、官宦之地。修复后的西街两边商铺'\'林立,商铺二楼道旗上的店名均为西街原有的老字号,重现了当年商业的繁华和民风的淳'\'朴。漫步西街,翰林书院、冯氏老宅、千年银杏、石佛古寺、三步两爿桥一一呈现眼前,'\'仿佛一段穿越时光之旅,悠远的记忆、旧时的生活渐渐清晰。', style='List Bullet')
document.add_page_break()                   # 增加分页
# 增加图像(此处用到图像python_logo.png,请自行添加到脚本所在目录中,或改成您的路径)
document.add_picture('d:/梅花洲.png', width=Cm(15))     # 将图宽度设为15cmparagraph = document.add_paragraph('表1 特色景点介绍')      # 添加表名称
paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER   # 两端对齐
table = document.add_table(rows=1, cols=3, style='Table Grid')    # 增加表格
table.style.paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '名称'
hdr_cells[1].text = '简介'
hdr_cells[2].text = '说明'
table.cell(0,0).width=Cm(5)                    # 设置列宽
table.cell(0,1).width=Cm(10)                   # 设置列宽
table.cell(0,2).width=Cm(5)                    # 设置列宽
mlst = [['石佛寺','据史料记载,唐肃宗至德二年,公元757年,乡民在这里挖出四尊笑面相对的'\'石佛,当地人出于敬畏之情,造了这座寺庙。寺庙历宋元两朝,屡毁屡建,至明代开始规模'\'日渐宏大,曾是江南禅门古刹之一。清末后变得冷清寂寞,尽失往日繁荣。2007年重建古寺。','d:/石佛寺.png'],['千年银杏','石佛寺旁一对传奇的古银杏,一树在河东,一树在河西,一树'\'雌,一树雄,两树隔河相望了千年却不能相拥。树高均在29米左右,树干粗壮,枝繁叶茂,需数'\'人才能合抱。2002年,嘉兴市南湖区人民政府颁发的古树名木保护牌,鉴定该银杏树树龄已有'\'1240多年,是嘉兴最古老的树木之一。','d:/千年古银杏.png'],['三步两爿桥','在浙江省嘉兴'\'市南湖区凤桥镇有座千年古刹石佛寺,石佛寺是江南名刹,可惜历代屡立兴废,至20世纪60年代'\'已荡然无存,遗址仅存千年古银杏两株、香花桥和三步两爿桥。这座奇特的“三步两爿桥”,建'\'造在两条河道的交叉处,呈90度角,就是说从第一座石桥走下去,走三步就可以上第二座石桥,'\'所以叫三步两爿桥。爿是当地方言,当地人称一座桥为一爿桥,相当于桥的量词。','d:/三步两爿桥.jpg']]
for i,_row in enumerate(mlst):row_cells = table.add_row().cells                # 添一行表格元素row_cells[0].text = _row[0]row_cells[1].text = '    '+_row[1]p = row_cells[1].paragraphs[0]p.paragraph_format.alignment =WD_ALIGN_PARAGRAPH.JUSTIFY # 单元格文字两端对齐# 表格中加图片row_cells[2].vertical_alignment=WD_ALIGN_VERTICAL.CENTER    # 垂直居中run = document.tables[0].cell(i+1, 2).paragraphs[0].add_run()run.add_picture(_row[2], width=Inches(2))         # 运行时图片必须存在
#row_cells = table.add_row().cells             # 添一行表格元素
#row_cells[0].vertical_alignment=WD_ALIGN_VERTICAL.CENTER  # 垂直居中
#row_cells[0].text = '三步两爿桥'
#row_cells[1].text = '    在浙江省嘉兴市南湖区凤桥镇有座千年古刹石佛寺,石佛寺是江南'\
#    '名刹,可惜历代屡立兴废,至20世纪60年代已荡然无存,遗址仅存千年古银杏两株、香花'\
#    '桥和三步两爿桥。这座奇特的“三步两爿桥”,建造在两条河道的交叉处,呈90度角,就是'\
#    '说从第一座石桥走下去,走三步就可以上第二座石桥,所以叫三步两爿桥。爿是当地方言,'\
#    '当地人称一座桥为一爿桥,相当于桥的量词。'
#p = row_cells[1].paragraphs[0]
#p.paragraph_format.alignment =WD_ALIGN_PARAGRAPH.JUSTIFY  # 单元格文字两端对齐
# 表格中加图片
#row_cells[2].vertical_alignment=WD_ALIGN_VERTICAL.CENTER  # 垂直居中
#run = document.tables[0].cell(4, 2).paragraphs[0].add_run()
#run.add_picture(r'd:/三步两爿桥.jpg', width=Inches(2))       # 运行时图片必须存在
document.save(r'd:/梅花洲景区介绍.docx')         # 保存文件

五、运行效果

图1 运行结果第1页

图2 运行结果第2页

Python-docx生成word文档相关推荐

  1. python-docx中文开发文档_使用Python语言-docx生成Word文档

    本文主要向大家介绍了使用Python语言-docx生成Word文档,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. < 学会来使用python操作数据表和PDF,今天我们尝试 ...

  2. python新建word文档_使用Python 自动生成 Word 文档的教程

    当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...

  3. python自动生成和读取word_使用Python自动生成Word文档的教程

    当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...

  4. python实现生成word文档并转为pdf

    python实现生成word文档,格式转为pdf 使用的是python-docx模块,在生成word文档后转为pdf格式是使用的是docx2pdf中的convert(使用convert转换时,要先创建 ...

  5. 用 Python 自动生成 Word 文档并在指定位置插入图片

    用Python生成Word文档 在指定位置插入图片 首先当然需要第三方库啦(▽) 天才第一步,第三方的库O(∩_∩)O哈哈~ 参照转发的是这位大佬的博客:https://blog.csdn.net/c ...

  6. python 自动生成word文档,python实现的生成word文档功能示例

    python实现的生成word文档功能示例 发布时间:2020-09-23 11:37:44 来源:脚本之家 阅读:108 作者:zhizunyu2009 本文实例讲述了python实现的生成word ...

  7. python 自动生成word文档_python实现的生成word文档功能示例

    本文实例讲述了python实现的生成word文档功能.分享给大家供大家参考,具体如下: 每月1次的测试费用报销,需要做一个文档.干脆花点时间写个程序吧. # -*- coding: utf-8 -*- ...

  8. Docx 生成word文档

    1.生成word代码 1 /// <summary> 2 /// 生成word文档 3 /// </summary> 4 /// <param name="te ...

  9. python docx修改word文档格式

    修改word文档格式,包括修改目录字体字号间距,修改一级标题字体字号间距,二级标题字体字号间距....正文字体字号间距,表格中的文字的字体字号间距,以图或表开头的图名称和表名称的字体字号间距. wor ...

  10. word python插件_用 Python 自动生成 Word 文档

    当然要用第三方库啦 :) 使用以下命令安装: pip install  python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文 ...

最新文章

  1. 在ChemDraw中输入千分号的方法
  2. 如果沟通有范式,它会是怎么样子?
  3. Framelayout
  4. gSoap的“error LNK2001: 无法解析的外部符号 _namespaces”解决方法
  5. matlab做比例积分微分控制,收放卷卷径计算+闭环摆杆控制参数自适应PID控制算法(变比例变积分变微分)介绍...
  6. 【c语言】棋盘游戏--三子棋
  7. Junit运行报initializationError错误
  8. 谷歌何时停止Android更新,谷歌宣布Android Studio将停止为32位系统提供更新
  9. 「造个轮子」——设计 HTTP 请求全局上下文
  10. 如何理解范德波尔方程
  11. java面试题(记录与分享)二
  12. 多条Precision-Recall(PR)曲线绘制(PR曲线)含python代码
  13. android加载网页pdf,android 一行代码搞定加载网络 pdf 文件
  14. PTA程序设计天梯赛 L2题解报告(40/40)
  15. 1683. Fridge
  16. PCB板框的绘制——AD19
  17. 计算机压缩文件上传无法打开,电脑打不开zip文件怎么解决并打开
  18. 2.06-外设篇-串口
  19. 【计算摄影学】总目录
  20. 在网站测试中如何做好安全性测试

热门文章

  1. 手机品牌是否一定要自研芯片
  2. 灰色预测模型_python
  3. 已知两角及其夹边,解三角形
  4. HTTP协议请求方式: 中GET、POST和HEAD的介绍
  5. PHP curl的DNS解析问题(PHP下curl很慢)
  6. 前端搬运工:零基础的前端开发初学者应如何系统地学习?前端掌握技能的学习路线
  7. React Native 启动流程 源码剖析
  8. 微信小程序导入微信聊天记录文件
  9. mysql的锁机制,你真的了解吗?进来吧!用图表告诉你
  10. python身份验证(身份证号中提取出生日期及性别)。