defadd_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 isNone:
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 notunderline:
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)returnhyperlink
document=docx.Document()
p=document.add_paragraph()#add a hyperlink with the normal formatting (blue underline)
hyperlink = add_hyperlink(p, 'http://www.google.com', 'Google', None, True)#add a hyperlink with a custom color and no underline
hyperlink = add_hyperlink(p, 'http://www.google.com', 'Google', 'FF8822', False)
document.save('demo.docx')