Background

  • 关于python操作word的相关资料还是挺少的,官方文档也是没法看。自己摸索出来记录下,方便以后自己查看,也分享给大家参考哈。
  • 这里使用的是python-docx依赖包。
  • 老规矩,先放效果图。
  • 原模板文档(箭头处是占位符哈)
    在这里插入图片描述

  • 插入图片后
    在这里插入图片描述

1、安装依赖

pip3 install python-docx

2、完整源码

from docx import Document
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


def center_insert_img(doc, img):
    """插入图片"""
    for paragraph in doc.paragraphs:
        # 根据文档中的占位符定位图片插入的位置
        if '<<img1>>' in paragraph.text:
            # 把占位符去掉
            paragraph.text = paragraph.text.replace('<<img1>>', '')
            run = paragraph.add_run('')
            run.add_break()
            # 添加图片并指定大小
            run.add_picture(img, width=Inches(6.2))


def save_img_to_doc(img):
    """把图片保存到doc文件中的指定位置"""
    tpl_doc = 'reports/template.docx'
    res_doc = 'reports/res/2022-03-11.docx'
    # 打开模板文件
    document = Document(tpl_doc)
    # 插入图片居中
    center_insert_img(document, img)
    # 保存结果文件
    document.save(res_doc)


def main():
    """主函数"""
    img = 'imgs/chart.png'
    save_img_to_doc(img)


if __name__ == '__main__':
    main()

FAQ

  • 占位符问题
    <<img1>>这个只是占位符,你可以换成其他任何的,只要能唯一识别到,比如ph_img1。有时无法替换是因为程序中读取doc文件时格式问题没把占位符识别成一个,可能识别成了ph_和img1,这个时候你把占位符选中,剪切掉然后再粘贴,粘贴时选择只粘贴文字就行了。具体验证占位符是否可用可参考这篇【python-docx替换字符串【保存原有样式】
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐