如何通过Python脚本将Excel中SharePoint相对超链接转为绝对链接?
方法一:让Excel存储绝对URL而非相对URL
- 手动禁用相对链接自动转换:
- 打开目标Excel文件,点击「文件>选项>高级」,滚动到「常规」区域后点击「Web选项」。
- 在弹出的「Web选项」窗口切换到「文件」标签页,取消勾选「将文件保存为网页时使用相对路径」,阻止Excel自动转换同站点超链接为相对路径。
- 手动输入绝对URL:添加超链接时直接录入完整的SharePoint绝对地址,而非通过Excel文件选择器选取同站点文件,避免触发相对路径转换。
- 利用基地址锁定路径:
按微软官方方法设置工作簿基地址(「帮助>设置工作簿链接的基地址」),将基地址设为SharePoint站点的根URL,后续可通过脚本提取该地址转换相对链接(见方法二)。
方法二:Python脚本自动将相对URL转换为绝对URL
openpyxl未提供直接获取工作簿基地址的API,但可通过解析Excel底层XML结构提取基地址,再拼接相对URL:
步骤1:提取工作簿的基地址
import zipfile import xml.etree.ElementTree as ET def get_workbook_base_url(file_path): # Excel XML命名空间 ns = {'ss': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'} try: with zipfile.ZipFile(file_path, 'r') as zf: # 读取工作簿核心XML文件 with zf.open('xl/workbook.xml') as f: tree = ET.parse(f) root = tree.getroot() # 查找workbookPr节点中的baseUrl属性 workbook_pr = root.find('ss:workbookPr', ns) if workbook_pr and 'baseUrl' in workbook_pr.attrib: return workbook_pr.attrib['baseUrl'] except Exception as e: print(f"读取基地址失败: {str(e)}") return None
步骤2:转换相对URL为绝对URL
结合原有超链接提取代码,添加转换逻辑:
from urllib.parse import urljoin from openpyxl import load_workbook file = "your_excel_file.xlsx" sheet_name = "Sheet1" wb = load_workbook(file, data_only=True) sheet = wb[sheet_name] # 提取超链接 hyperlinks = {} for row in sheet.iter_rows(): for cell in row: if cell.hyperlink: hyperlinks[cell.coordinate] = cell.hyperlink.target # 获取基地址并转换相对链接 base_url = get_workbook_base_url(file) if base_url: converted_hyperlinks = { coord: urljoin(base_url, rel_link) for coord, rel_link in hyperlinks.items() } print("转换后的绝对链接:", converted_hyperlinks) else: print("未找到工作簿基地址,无法转换相对链接")
说明
- 该方法依赖Excel中已设置的基地址(通过微软官方方法设置的地址会存储在XML中)。
- 若未设置基地址,需额外获取文件原SharePoint URL(可从本地文件属性或SharePoint API获取,但可靠性较低)。
内容的提问来源于stack exchange,提问作者Eric Sun
相关产品推荐
相关产品推荐

