Python Excel 批量添加超链接方法 openpyxl 实战
用openpyxl给Excel单元格批量加超链接:跳转外部网址、打开本地文件、跳转到本工作簿指定sheet,自动变蓝色加下划线,省去手动右键链接。
场景痛点
做目录页、素材索引、客户清单时,经常要给一列名称挂上对应的网址、本地文件路径,或者跳到本工作簿的某个 sheet。手动右键"链接"、选文件、改显示文字,一行行做。几百行下来鼠标都点废了。而且本地文件一改名,链接全失效还得返工。用Python维护一份"名称->链接"的对照表,一键生成带超链接的Excel,改对照表就行。
用到的库
pip install openpyxl
完整代码
# -*- coding: utf-8 -*-
"""
openpyxl 批量添加超链接:
1) 外部网址
2) 本地文件
3) 本工作簿内部跳转
"""
from openpyxl import Workbook
from openpyxl.styles import Font
def build_index(path: str):
wb = Workbook()
# ===== 目录页 =====
ws = wb.active
ws.title = "目录"
ws.append(["名称", "说明", "链接"])
# 数据:名称、说明、超链接地址
items = [
("百度", "搜索引擎", "https://www.baidu.com"),
("GitHub", "代码托管", "https://github.com"),
("本月报表", "跳转到本工作簿sheet", "#'10月报表'!A1"),
("本地文件示例", "打开同目录下的文件", "report.pdf"),
]
for name, desc, url in items:
ws.append([name, desc, None])
# 批量给 A 列加超链接
link_font = Font(color="0563C1", underline="single")
for row in range(2, 2 + len(items)):
cell = ws.cell(row=row, column=1)
url = items[row - 2][2]
cell.hyperlink = url # 挂超链接
cell.value = items[row - 2][0]
cell.font = link_font # 蓝色 + 下划线,看着像链接
# 调整列宽,方便看
ws.column_dimensions["A"].width = 18
ws.column_dimensions["B"].width = 22
ws.column_dimensions["C"].width = 30
# ===== 建一个被跳转的目标 sheet =====
target = wb.create_sheet("10月报表")
target.append(["月份", "销售额", "成本", "毛利"])
target.append(["10月", 120, 80, 40])
target.append(["11月", 150, 90, 60])
wb.save(path)
print("超链接已生成:", path)
def main():
build_index("index_with_links.xlsx")
if __name__ == "__main__":
main()
代码讲解
- 加超链接就一句话:
cell.hyperlink = url。openpyxl 会把它写进 xlsx 的内部关系表,打开文件后 Ctrl+点击(或直接点)就能跳转。 - 三种 URL 写法:
- 外部网址:直接写
https://...,注意带https://前缀,否则 Excel 可能识别成相对路径。 - 本工作簿跳转:写
#'sheet名'!A1,前面加#,sheet 名带单引号。本例跳到"10月报表"sheet 的 A1。 - 本地文件:写相对或绝对路径,如
report.pdf、D:/files/a.xlsx。跨操作系统注意斜杠用正斜杠/。 - 光挂
hyperlink单元格还是黑字黑底,看不出是链接。手动套一个Font(color="0563C1", underline="single"),蓝色单下划线,视觉上就和 Excel 自带 Hyperlink 样式一致。 cell.value是显示文字,cell.hyperlink是跳转目标,两者可以不同。比如显示"点我查看",实际跳到长 URL,这在做目录页时很好用。- 批量模式:把"名称+链接"放在一个列表里循环,比一行行赋值干净。
运行结果
生成 index_with_links.xlsx。打开"目录"sheet,A 列四条文字都是蓝色下划线链接:点"百度"打开浏览器到百度首页,点"本月报表"跳到本工作簿"10月报表"sheet,点"本地文件示例"尝试打开同目录下 report.pdf(这个文件不存在会报错,属正常)。
注意事项
- 本地文件链接用相对路径时,是相对"xlsx 文件所在目录"解析的,不是相对你运行 Python 的目录。移动 xlsx 文件后,相对路径会失效,这点和网页链接不太一样。
- 跨平台路径斜杠统一用
/,Windows 上D:\a\b.xlsx写成D:/a/b.xlsx更稳。 - 本工作簿跳转的语法是
#'sheet名'!A1,前面必须有#,漏了 Excel 会当成外部路径找不到。 - 超链接里的中文 sheet 名、中文文件名一般没问题,但建议 URL 里有空格时用
%20或者把路径用引号包好。 - 用 pandas 读这个文件时,超链接信息会被丢掉,只读
cell.value;要读链接得回到 openpyxl 拿cell.hyperlink.target。 - 批量加链接前先用几百行数据测一次,确认
cell.hyperlink = url的赋值方式在你的 Excel 版本里能正确识别成可点击链接。

更新时间:2026-09-15 09:14:40