python word 创建超链接

import docx
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import Cm, Pt

#document = Document()
# 设置一个空白样式
#style = document.styles['Normal']
# 设置西文字体
#style.font.name = 'Times New Roman'
## 设置中文字体
#style.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

#定义 创建 超链接 函数
def add_hyperlink(paragraph, url, text, color, underline):
    """
    A function that places a hyperlink within a paragraph object.

    :param paragraph: The paragraph we are adding the hyperlink to.
    :param url: A string containing the required url
    :param text: The text displayed for the url
    :return: The hyperlink object
    """

    # This gets access to the document.xml.rels file and gets a new relation id value
    part = paragraph.part
    r_id = part.relate_to(url, docx.opc.constants.RELATIONSHIP_TYPE.HYPERLINK, is_external=True)

    # Create the w:hyperlink tag and add needed values
    hyperlink = docx.oxml.shared.OxmlElement('w:hyperlink')
    hyperlink.set(docx.oxml.shared.qn('r:id'), r_id, )

    # Create a w:r element
    new_run = docx.oxml.shared.OxmlElement('w:r')

    # Create a new w:rPr element
    rPr = docx.oxml.shared.OxmlElement('w:rPr')

    # Add color if it is given
    if not color is None:
        c = docx.oxml.shared.OxmlElement('w:color')
        c.set(docx.oxml.shared.qn('w:val'), color)
        rPr.append(c)

    # Remove underlining if it is requested
    if not underline:
        u = docx.oxml.shared.OxmlElement('w:u')
        u.set(docx.oxml.shared.qn('w:val'), 'none')
        rPr.append(u)

    # Join all the xml elements together add add the required text to the w:r element
    new_run.append(rPr)
    new_run.text = text
    hyperlink.append(new_run)

    paragraph._p.append(hyperlink)

    return hyperlink
#定义 创建 书签 函数
def add_bookmark(paragraph, bookmark_text, bookmark_name):
    """
    A function that places a hyperlink within a paragraph object.

    :param paragraph: 创建一个段落
    :param bookmark_text: 定位到书签文本会被插入到文档中,
    :param tebookmark_name: 书签名称
    """
    run = paragraph.add_run()
    tag = run._r  # for reference the following also works: tag =  document.element.xpath('//w:r')[-1]
    start = docx.oxml.shared.OxmlElement('w:bookmarkStart')
    start.set(docx.oxml.ns.qn('w:id'), '0')
    start.set(docx.oxml.ns.qn('w:name'), bookmark_name)
    tag.append(start)

    text = docx.oxml.OxmlElement('w:r')
    text.text = bookmark_text
    tag.append(text)

    end = docx.oxml.shared.OxmlElement('w:bookmarkEnd')
    end.set(docx.oxml.ns.qn('w:id'), '0')
    end.set(docx.oxml.ns.qn('w:name'), bookmark_name)
    tag.append(end)

document = docx.Document()
p = document.add_paragraph()
paragraph= document.add_paragraph()

document.add_page_break()

# 添加链接到本文档到书签链接 #temp1 #号后面跟书签名称
hyperlink = add_hyperlink(p, '#temp1', '书签', None, True)
#分页
document.add_page_break()

# 添加链接到url
hyperlink = add_hyperlink(p, 'www.baidu.com', '百度', None, True)

#可以将插入段落放在 add_paragraph('1') 也可以  将插入段落 放在 bookmark_text  书签名称bookmark_name
a=add_bookmark(paragraph= document.add_paragraph('1'), bookmark_text="",bookmark_name="temp1")
document.add_page_break()

b=add_bookmark(paragraph= document.add_paragraph('2'), bookmark_text="",bookmark_name="temp2")

document.add_page_break()
c=add_bookmark(paragraph= document.add_paragraph('3'), bookmark_text="",bookmark_name="temp3")
document.add_page_break()

document.save('demo.docx')

 

参考文档

  1. https://stackoverflow.com/questions/57586400/how-to-create-bookmarks-in-a-word-document-then-create-internal-hyperlinks-to-t
  2. https://github.com/python-openxml/python-docx/issues/74
  3. https://www.cnblogs.com/z123zero/p/10770097.html#%E5%AF%B9%E8%B1%A1%E5%85%B3%E7%B3%BB

你可能感兴趣的:(python学习,python,word)