You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python读取Excel单元格中PDF超链接实际文件路径失败的问题

Python读取Excel单元格中PDF超链接实际文件路径失败的问题

你遇到的这个问题我之前也碰到过,大概率是因为你的Excel单元格里的超链接是用HYPERLINK函数创建的(比如=HYPERLINK("实际路径", "001")这种形式),而不是直接右键插入的超链接。openpyxl在处理这种函数生成的超链接时,cell.hyperlink.target并不会返回实际的文件路径,反而会把函数里设置的显示文本(也就是"001"对应的数值1.0)返回给你,这就是你看到奇怪输出的原因。

给你两个可行的解决方案:

方案一:用xlwings读取(更简单可靠)

既然你已经导入了xlwings,不如直接用它来读取,因为xlwings是调用Excel的原生API来操作的,不管超链接是函数创建的还是直接插入的,都能准确获取到实际路径。修改后的代码如下:

import xlwings as xw

path = r"C:\Users\JCP2\demo\demo.xlsm"

# 打开Excel文件(会启动Excel进程,用完自动关闭)
with xw.Book(path) as wb:
    ws = wb.sheets["Sheet1"]
    # 获取第2行第1列单元格的超链接地址
    file_path = ws.range(2, 1).hyperlink.address
    print(file_path)

运行这段代码应该就能得到你想要的PDF文件路径了。

方案二:用openpyxl解析HYPERLINK公式(如果你坚持用openpyxl)

如果不想切换库,那我们可以手动解析单元格里的HYPERLINK函数,提取出里面的文件路径。代码示例如下:

import openpyxl

path = r"C:\Users\JCP2\demo\demo.xlsm"
wb = openpyxl.load_workbook(path)
ws = wb["Sheet1"]

cell = ws.cell(2, 1)
file_path = None

# 判断单元格是否是HYPERLINK公式
if cell.data_type == 'f' and cell.value.startswith('=HYPERLINK('):
    # 去掉公式前后的=HYPERLINK(和),然后分割成路径和显示文本两部分
    formula_content = cell.value[11:-1]
    # 按第一个逗号分割,避免路径里有逗号的情况
    path_part, _ = formula_content.split(',', 1)
    # 去掉路径两边的引号
    file_path = path_part.strip('"')

if file_path:
    print(file_path)
else:
    # 处理直接插入的超链接情况
    if cell.hyperlink:
        print(cell.hyperlink.target)
    else:
        print("该单元格没有超链接")

这个方法会先判断单元格是不是HYPERLINK公式,然后手动提取路径部分,同时也兼容直接插入的超链接场景。

备注:内容来源于stack exchange,提问作者Jon Percival

火山引擎 最新活动