我想创建一个包含图片链接的表格。我下面提供了一个代码,它几乎可以完成任务。问题在于它在每个链接文本之前放置了一个新行。如何避免在表格单元格中的链接文本之前放置新行?是否可以在不在单元格中创建新段落的情况下放置链接?
from docx import Document
from docx.oxml.shared import OxmlElement, qn
import docx
from lxml.etree import SubElement
def add_link(paragraph, link_to, text, tool_tip=None):
# create hyperlink node
hyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')
# set attribute for link to bookmark
hyperlink.set(docx.oxml.shared.qn('w:anchor'), link_to,)
if tool_tip is not None:
# set attribute for link to bookmark
hyperlink.set(docx.oxml.shared.qn('w:tooltip'), tool_tip,)
new_run = docx.oxml.shared.OxmlElement('w:r')
rPr = docx.oxml.shared.OxmlElement('w:rPr')
c = docx.oxml.shared.OxmlElement('w:color')
c.set(docx.oxml.shared.qn('w:val'), '2A6099')
rPr.append(c)
u = docx.oxml.shared.OxmlElement('w:u')
u.set(docx.oxml.shared.qn('w:val'), 'single')
rPr.append(u)
new_run.append(rPr)
new_run.text = text
hyperlink.append(new_run)
paragraph._p.append(hyperlink) # this to add the link in the w:p
def add_bookmark(paragraph, bookmark_text, bookmark_name):
run = paragraph.add_run()
r = run._r
SubElement(r, qn('w:bookmarkStart'), {
qn('w:id'): '0',
qn('w:name'): bookmark_name,
})
SubElement(r, qn('w:r'), {
qn('w:t'): bookmark_text,
})
SubElement(r, qn('w:bookmarkEnd'), {
qn('w:id'): '0',
qn('w:name'): bookmark_name,
})
document = Document()
c = document.add_paragraph('Figure ', style='Caption')
add_bookmark(paragraph=c, bookmark_text="", bookmark_name=f"test")
document.add_page_break()
table = document.add_table(rows=1, cols=8)
table.style = 'Table Grid'
hdr_cells = table.rows[0].cells
e = hdr_cells[0].add_paragraph()
add_link(paragraph = e, link_to=f"test", text="test", tool_tip="PSD")
e = hdr_cells[1].add_paragraph()
add_link(paragraph = e, link_to=f"test", text="test", tool_tip="PSD")
document.save('link_in_table.docx')
表cell的文档说:
默认情况下,新单元格包含单个段落。只读
因此,我们向该段落添加一个超链接,使用
paragraphs
方法将其从列表中取出。
hdr_cells = table.rows[0].cells
e = hdr_cells[0].paragraphs[0]
add_link(paragraph=e, link_to=f"test", text="test", tool_tip="PSD")
e = hdr_cells[1].paragraphs[0]
add_link(paragraph=e, link_to=f"test", text="test", tool_tip="PSD")
document.save('link_in_table.docx')