如何在表格中放置一个链接,而开头没有下一行?

问题描述 投票:0回答:1

我想创建一个包含图片链接的表格。我下面提供了一个代码,它几乎可以完成任务。问题在于它在每个链接文本之前放置了一个新行。如何避免在表格单元格中的链接文本之前放置新行?是否可以在不在单元格中创建新段落的情况下放置链接?

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')
python python-docx
1个回答
0
投票

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')
© www.soinside.com 2019 - 2024. All rights reserved.