如何用xlwings读取Excel文档内超链接的完整file路径?
解决xlwings读取Excel内部超链接完整路径的问题
你遇到的问题是因为xlwings的range.hyperlink属性仅支持读取外部网页类超链接,对于指向文档内部的超链接,需要通过调用Excel原生对象模型的Hyperlinks集合来获取完整路径。
修改后的代码
import os import sys import xlwings as xw path = os.path.abspath(os.path.dirname(sys.argv[0])) fn = os.path.join(path, "inp.xlsx") wb = xw.Book(fn) ws1 = wb.sheets["MainOverview"] # 处理内部超链接单元格H18 val = ws1["H18"].value inp_link = "" hyperlinks = ws1.range("H18").api.Hyperlinks if hyperlinks.Count > 0: # 获取单元格内的第一个超链接(通常单元格仅含一个超链接) link = hyperlinks(1) # 将Windows路径的反斜杠转为正斜杠,组合成file://格式的完整路径 workbook_path = link.Address.replace("\\", "/") full_link = f"file:///{workbook_path}#{link.SubAddress}" inp_link = full_link print(f"{val}: {inp_link}") # 处理网页超链接单元格I18 val = ws1["I18"].value inp_link = ws1["I18"].hyperlink print(f"{val}: {inp_link}")
关键说明
ws1.range("H18").api.Hyperlinks:通过xlwings的api属性直接调用Excel原生对象模型,获取单元格的超链接集合。link.Address:返回超链接指向的工作簿完整本地路径(如C:\DEV\...\inp.xlsx)。link.SubAddress:返回文档内部的定位信息(如Sheet2!A1,即目标工作表和单元格位置)。- 最终组合出的
file:///开头路径,和鼠标悬停时显示的格式完全一致。
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

