我使用python-docx创建一个新文档,然后添加一个表(rows=1,cols=5)。然后,我向五个单元格中的每个单元格添加一张图片。我已经让代码正常工作了,但我在docx上看到的并不是我手动使用Word时看到的。
具体地说,如果我设置了“显示格式化标记”,然后查看docx生成的内容,那么在每个单元格的开头总是有一个硬返回(由add_paragraph方法放在那里)。当我手动使用Word时,没有硬返回。
硬返回的结果是,每一张图片都比我想要的位置下降了一行。如果我使用Word,图片就是我期望的位置。
同样奇怪的是,在docx文档上,我可以手动进入并单击硬回车键旁边的,按一次向下光标键,然后按一次退格键,硬回车键被删除,图片移动到单元格的顶部。
所以我的问题是,有没有人知道在执行add_paragraph方法时,有没有一种方法可以在表格单元格中获得图片,而不需要硬返回?
任何帮助都将不胜感激。
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)
发布于 2020-10-06 10:28:02
新创建的表格中的每个空白单元格都包含一个空段落。这只是Word格式的一件事。我想当你使用Word应用程序时,它提供了一个位置来放置插入标记(闪烁的垂直光标)。一个完全空白的单元格将没有“单击”的位置。
这要求向单元格添加内容的任何代码都必须以不同的方式处理第一段。简而言之,您作为cell.paragraphs[0]
访问第一个段落,并且只使用cell.add_paragraph()
创建第二个及以后的段落。
因此,在这个特殊情况下,paragraph_format_run()
函数将如下所示:
def paragraph_format_run(cell):
paragraph = cell.paragraphs[0]
...
这假设了很多,就像它只在cell
为空时起作用,但是考虑到你现在对单元格段落的了解,如果以后决定你需要的话,你可以调整它来将多个图像添加到一个单元格中。
https://stackoverflow.com/questions/64218305
复制相似问题