我的知识记录

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.pdfD:/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 版本里能正确识别成可点击链接。

Python Excel 批量添加超链接方法 openpyxl 实战

标签:

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

上一篇:Python Excel批量修改列名

下一篇:Python Excel添加筛选下拉箭头:auto_filter一键开启