您的位置 首页 知识

Python实现在word中指定位置插入图片或表格pythonworld文档

目录 1、新建表格 2、在第一段右边加图片 3、指定位置(占位符替换)插入图片 4、在table的一个cell…

目录
  • 1、新建表格
  • 2、在第一段右边加图片
  • 3、指定位置(占位符替换)插入图片
  • 4、在table的一个cell中插入图片
  • 5、python使用docx向word文档中表格插入图片并固定缩放
  • 6、通过python-docx给word文档中的指定位置添加表格
    • 6.1 需求
    • 6.2 设计

docx库add_picture()技巧不支持对图片位置的设置

1、新建表格

新建一个1行3列的表格,在中间的一列中插入图片

from docx import Documentfrom docx.shared import Ptfrom docx.oxml.shared import OxmlElementfrom docx.enum.text import WD_ALIGN_PARAGRAPHdef add_center_picture(self, image_path_or_stream, width=None, height=None): run = self.doc.add_paragraph().add_run() tab = self.doc.add_table(rows=1, cols=3) 添加一个1行3列的空表 cell = tab.cell(0, 1) 获取某单元格对象(从0开始索引) ph =cell.paragraphs[0] run = ph.add_run() run.add_break() run.add_picture(image_path_or_stream, width=width, height=height)

2、在第一段右边加图片

from docx import Documentfrom docx.shared import Ptfrom docx.oxml.shared import OxmlElementfrom docx.enum.text import WD_ALIGN_PARAGRAPHdef add_log_img(doc, log_path): log_path : 图片本地地址 doc.add_picture(log_path, width=Pt(100), height=Pt(100)) doc.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT return doc

3、指定位置(占位符替换)插入图片

原模板文档(箭头处是占位符)

插入图片后

from docx import Documentfrom docx.shared import Inchesfrom docx.oxml.ns import qnfrom docx.enum.text import WD_ALIGN_PARAGRAPHdef 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()

占位符难题

<<img1>>这个只是占位符,可以换成其他任何的,只要能唯一识别到,比如ph_img1。有时无法替换是由于程序中读取doc文件时格式难题没把占位符识别成一个,可能识别成了ph_和img1,这个时候你把占位符选中,剪切掉接着再粘贴,粘贴时选择只粘贴文字就行了。

4、在table的一个cell中插入图片

from docx import Document from docx.shared import Cm 引入cm单位,便于设置图片的宽度from docx.enum.table import WD_TABLE_ALIGNMENT 用于设置单元格的内容居中对齐def insert_img2table(): 创建文档 document = Document() 添加表格 tab1 =document.add_table(rows=1,cols=1) 添加一个1行1列的空表 cell=tab1.cell(0,0) 获取某单元格对象(从0开始索引) 在单元格中添加段落 c_p1 =cell.paragraphs[0] c_p1.paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER 设置单元格内容居中对齐 在单元格中添加区块 c_run1=c_p1.add_run() 在单元格(区块)中添加图片 c_run1.add_picture(‘cat.png’,width=Cm(10)) return document

5、python使用docx向word文档中表格插入图片并固定缩放

使用python的docx模块对word文档进行编辑时,有时候需要向表格中插入图片,然而插入的图片一般是按照原图片的大致插入的,即使你的word文档一开始就设置好了固定宽高,似乎也是不起影响,这个时候就需要在插入后,用python去调整图片的宽高。

向word文档中的第二个表格的第3行第3列插入了一个图片。接着获取当前图片的高度,将其宽度调整为固定的10.71cm,再接着通过计算宽度变化的比例,调整高度的变化。 最终将文档保存为一个新的docx文件即可from docx import Documentfrom docx import shared 本脚本用于测试word文件的表格写入 document = Document(“test.docx”) 向word文档中的第二个表格的第3行第3列插入了一个图片。pic = document.tables[1].cell(2,2).paragraphs[0].add_run().add_picture(“Output_1.png”)获取原图片的宽度source_width = pic.width设置图片插入后的固定宽度pic.width = shared.Cm(10.71)按图片宽度的缩放比例配置图片的高度pic.height = int(pic.height * (pic.width / source_width)) document.save(“1.docx”)

6、通过python-docx给word文档中的指定位置添加表格

1.读取一个已有的word文档。docx格式。

2.在该word文档中,通过一个给定的文字。找到该位置。在该位置的下方添加一个表格。例如在图中“BUG情况表”的下方插入一个表格

6.1 需求

1.读取一个已有的word文档。docx格式。

2.在该word文档中,通过一个给定的文字。找到该位置。在该位置的下方添加一个表格。例如在图中“BUG情况表”的下方插入一个表格

3.表格内容如下。要求添加完该表格后,如果表格内容发生变更。还能再次通过该程序,修改表格里的数据。

6.2 设计

通过python-docx读取word文档。通过document.paragraphs定位指定文字的位置。

通过xlwings读取excel的内容,存成list

    ]。

    通过docx的add_table增加一个表格,并且更改表头颜色,合并表格等操作

    通过识别表头的第一行,判断是否是已经存在这个表格,来决定是否要删除原表格

    -*- coding: UTF-8 -*-import sysfrom copy import deepcopyimport xlwingsfrom docx import Documentfrom docx.oxml.ns import nsdeclsfrom docx.oxml import parse_xmldef copy_table_after(table, paragraph): tbl, p = table._tbl, paragraph._p new_tbl = deepcopy(tbl) p.addnext(new_tbl)def move_table_after(table, paragraph): tbl, p = table._tbl, paragraph._p p.addnext(tbl)def get_excel_date(filename): ”’ 获得excel里的所有内容,返回list :param filename: excel路径 :return: list

      ] ”’ app = xlwings.App(visible=False, add_book=True) app.display_alerts = False app.screen_updating = False wb = app.books.open(filename) sht = wb.sheets[0] rng = sht.range(‘A1′) 把excel里的数据读取成 年-月-日 时:分:秒的格式 my_date_handler = lambda year, month, day, hour, minute, second, kwargs: “%04i-%02i-%02i %02i:%02i:%02i” % ( year, month, day, hour, minute, second) 取出所有内容,这里用ig这个变量,是为了庆祝I.G获得LOL S8赛季总冠军 ig = rng.current_region.options(index=False, numbers=int, empty=’N/A’, dates=my_date_handler) result = ig.value wb.close() app.quit() return resultdef delete_table_with_title(document,expect_text): allTables = document.tables for activeTable in allTables: if activeTable.cell(0, 0).paragraphs[0].text == expect_text: print(‘删除成功’) activeTable._element.getparent().remove(activeTable._element)def insert_table_after_text(file_name,excel_name,expect_text): document = Document(file_name) 由于docx读出来的都是unicode类型的,因此我们要用unicode类型的进行查找 expect_text=expect_text.decode(‘utf-8’) delete_table_with_title(document,expect_text) target = None for paragraph in document.paragraphs: paragraph_text = paragraph.text if paragraph_text.endswith(expect_text): target = paragraph break if target is not None: records = get_excel_date(excel_name) 获得excel数据的栏数,初始化一个空的table col = len(records[0]) table = document.add_table(rows=1, cols=col) table.style = ‘Table Grid’ 给table加一个表头,并且合并第一栏 shading_elm_1 = parse_xml(r'<w:shd } w:fill=”D9E2F3″/>’.format(nsdecls(‘w’))) table.rows[0].cells[0]._tc.get_or_add_tcPr().append(shading_elm_1) table.rows[0].cells[0].text=expect_text table_row=table.rows[0] first=table_row.cells[0] end=table_row.cells[-1] first.merge(end) 合并结束,开始把excel里的内容添加到table里 for tr_list in records: row_cells = table.add_row().cells index = 0 for td_list in tr_list: row_cells[index].text = td_list index = index + 1 把添加的table移动到指定的位置 move_table_after(table, target) 保存 document.save(file_name)if __name__ == ‘__main__’: insert_table_after_text(‘demo2.docx’, ‘demo.xlsx’,”BUG情况表”)

      最终效果:

      到此这篇关于Python实现在word中指定位置插入图片或表格的文章就介绍到这了,更多相关Python word插入图片或表格内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      无论兄弟们可能感兴趣的文章:

      • python读取word文档,插入mysql数据库的示例代码
      • Python操作word文档插入图片和表格的实例演示
      • Python实现将Excel内容插入到Word模版中
      • 使用Python在Word中插入图片并文字环绕的技巧
      • 使用Python在Word表格中插入或删除行或列的几种技巧
      • Python在Word文档中插入图片的三种方式
      • 使用Python实现将Excel表格插入到Word文档中
      • 使用Python在Word文档中插入和删除文本框
      版权声明
      返回顶部