首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python-docx将图片放入表中的问题

python-docx将图片放入表中的问题
EN

Stack Overflow用户
提问于 2020-10-06 09:50:17
回答 1查看 980关注 0票数 1

我使用python-docx创建一个新文档,然后添加一个表(rows=1,cols=5)。然后,我向五个单元格中的每个单元格添加一张图片。我已经让代码正常工作了,但我在docx上看到的并不是我手动使用Word时看到的。

具体地说,如果我设置了“显示格式化标记”,然后查看docx生成的内容,那么在每个单元格的开头总是有一个硬返回(由add_paragraph方法放在那里)。当我手动使用Word时,没有硬返回。

硬返回的结果是,每一张图片都比我想要的位置下降了一行。如果我使用Word,图片就是我期望的位置。

同样奇怪的是,在docx文档上,我可以手动进入并单击硬回车键旁边的,按一次向下光标键,然后按一次退格键,硬回车键被删除,图片移动到单元格的顶部。

所以我的问题是,有没有人知道在执行add_paragraph方法时,有没有一种方法可以在表格单元格中获得图片,而不需要硬返回?

任何帮助都将不胜感激。

代码语言:javascript
运行
复制
def paragraph_format_run(cell):
    paragraph = cell.add_paragraph()
    format = paragraph.paragraph_format
    run = paragraph.add_run()
    
    format.space_before = Pt(0)
    format.space_after = Pt(0)
    format.line_spacing = 1.0
    format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    return paragraph, format, run

def main():
    document = Document()
    
    sections = document.sections
    section = sections[0]
    
    section.top_margin = Inches(1.0)
    section.bottom_margin = Inches(1.0)
    section.left_margin = Inches(0.75)
    section.right_margin = Inches(0.75)
    
    table = document.add_table(rows=1, cols=5)
    table.allow_autofit = False
    
    cells = table.rows[0].cells

    for i in range(5):
        pic_path = f"Table_Images\pic_{i}.jpg"
        
        cell = cells[i]
        cell.vertical_alignment = WD_ALIGN_VERTICAL.TOP
        cell_p, cell_f, cell_r = paragraph_format_run(cell)
        
        cell_r.add_picture(pic_path, width=Inches(1.25))

    doc_path = "TableTest_1.docx"
    document.save(doc_path)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-06 10:28:02

新创建的表格中的每个空白单元格都包含一个空段落。这只是Word格式的一件事。我想当你使用Word应用程序时,它提供了一个位置来放置插入标记(闪烁的垂直光标)。一个完全空白的单元格将没有“单击”的位置。

这要求向单元格添加内容的任何代码都必须以不同的方式处理第一段。简而言之,您作为cell.paragraphs[0]访问第一个段落,并且只使用cell.add_paragraph()创建第二个及以后的段落。

因此,在这个特殊情况下,paragraph_format_run()函数将如下所示:

代码语言:javascript
运行
复制
def paragraph_format_run(cell):
    paragraph = cell.paragraphs[0]
    ...

这假设了很多,就像它只在cell为空时起作用,但是考虑到你现在对单元格段落的了解,如果以后决定你需要的话,你可以调整它来将多个图像添加到一个单元格中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64218305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档