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

用Python生成Word文档

在指定位置插入图片

首先当然需要第三方库啦()

天才第一步,第三方的库O(∩_∩)O哈哈~

参照转发的是这位大佬的博客:https://blog.csdn.net/cloveses/article/details/81668797
受益匪浅,感谢感谢(o)/~
使用以下命令安装:

pip install python-docx

那么重点来了:

使用该库的基本步骤为:
1.建立一个文档对象
2.设置文档的格式(默认字体,页面边距等)
3.在文档对象中加入段落文本,表格,图像等,并指定其样式
4.保存文档
注:本库仅支持生成Word2007以后版本的文档类型,即扩展名为.docx(ps:我用的WPS和word2019亲测也是阔以滴)

第一部分:

from docx import Document
 
doc = Document()                #以默认模板建立文档对象
 
doc = Document('a.docx')     # 读取a.docx文档,建立文档对象

第二部分:

from docx.shared import Inches,Pt
 
def chg_font(obj,fontname='微软雅黑',size=None):
 
    ## 设置字体函数
 
    obj.font.name = fontname
 
    obj._element.rPr.rFonts.set(qn('w:eastAsia'),fontname)
 
    if size and isinstance(size,Pt):
 
        obj.font.size = size
 
 
distance = Inches(0.3)
 
sec = doc.sections[0]             # sections对应文档中的“节”
 
sec.left_margin = distance     # 以下依次设置左、右、上、下页面边距
 
sec.right_margin = distance
 
sec.top_margin = distance
 
sec.bottom_margin = distance
 
sec.page_width =Inches(12)        #设置页面宽度
 
sec.page_height = Inches(20)       #设置页面高度
 
##设置默认字体
 
chg_font(doc.styles['Normal'],fontname='宋体')

第三部分:

3.1添加段落文本

paragraph =doc.add_paragraph('text....')
 
ph_format =paragraph.paragraph_format
 
ph_format.space_before =Pt(10)     #设置段前间距
 
ph_format.space_after =Pt(12)       #设置段后间距
 
ph_format.line_spacing=Pt(19)       #设置行间距

如果希望同一段落中的文本格式不同,就需要使用run对象(阔以理解为单独设置格式的段落内对象)
例如:

run = paragraph.add_run('text...')
 
run.bold = True #设置字体为粗体
 
chg_font(run,fontname='微软雅黑', size=Pt(12))  #设置字体和字号

3.2添加表格,并写入相关内容

tab =doc.add_table(rows=4,cols=4)   #添加一个4行4列的空表
 
cell=tab.cell(1,3)  #获取某单元格对象(从0开始索引)

在单元格中添加文本:
cell.text=‘abc’
在单元格中添加多行文本:(指定转行)

ph =cell.paragraphs[0]
 
run=ph.add_run(‘text....)'
run.add_break()               # 添加一个折行
run.add_picture('a.png')   # 插入图像,可以是内存中的图像,width=Inches(1.0)指定宽度。

3.3在文档中添加图像:

doc.add_picture('a.png')

步骤四:

doc.save('a.docx')    #保存图像

做了一个简单的测试,生成word文档的速度还是比较快的,插入的图片也是可以确定具体的图片插入位置,but 我现在还不太确定具体图片位置定位是怎样插入到指定位置的(尴尬 ̄□ ̄||哈哈) 现在还在研究之中 不过程序是直接运行出来了,看见运行出来的结果我也是一脸懵逼O(∩_∩)O哈哈~
运行结果如下:
插入前:
插入前报告长这样
插入后:
插入后图片长这样o((⊙﹏⊙))o懵逼.png
完整代码示例:

from docx import Document

doc = Document()  # 以默认模板建立文档对象

doc = Document('a.docx')  # 读取a.docx文档,建立文档对象

from docx.shared import Inches, Pt

from docx.oxml.ns import qn


def chg_font(obj, fontname='微软雅黑', size=None):
    ## 设置字体函数

    obj.font.name = fontname

    obj._element.rPr.rFonts.set(qn('w:eastAsia'), fontname)

    if size and isinstance(size, Pt):
        obj.font.size = size


distance = Inches(0.3)

sec = doc.sections[0]  # sections对应文档中的“节”

sec.left_margin = distance  # 以下依次设置左、右、上、下页面边距

sec.right_margin = distance

sec.top_margin = distance

sec.bottom_margin = distance

sec.page_width = Inches(12)  # 设置页面宽度

sec.page_height = Inches(20)  # 设置页面高度

##设置默认字体

chg_font(doc.styles['Normal'], fontname='宋体')

##步骤三:
##1.添加段落文本
paragraph = doc.add_paragraph('text....')

ph_format = paragraph.paragraph_format

ph_format.space_before = Pt(10)  # 设置段前间距

ph_format.space_after = Pt(12)  # 设置段后间距

ph_format.line_spacing = Pt(19)  # 设置行间距

##2.添加表格,并写入相关内容
tab = doc.add_table(rows=4, cols=4)  # 添加一个4行4列的空表

cell = tab.cell(1, 3)  # 获取某单元格对象(从0开始索引)


##在单元格中添加文本:
##在单元格中添加多行文本(指定转行)
ph = cell.paragraphs[0]

run = ph.add_run('text....')
run.add_break()  # 添加一个折行
run.add_picture('a.png')  # 插入图像,可以是内存中的图像,width=Inches(1.0)指定宽度。


##3.在文档中添加图像;
doc.add_picture("a.png")

##步骤四:
doc.save('a.docx')    #保存图像

  • 11
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值