使用Pandas与openpyxl合并Excel时遇URL超限警告求助
问题描述
- 使用Python的Pandas和openpyxl合并多个xlsx文件时,近期弹出警告:
UserWarning: Ignoring URL "~~~~~~" since it exceeds Excel's limit of 65,530 URLS per worksheet - 该代码已稳定运行3个月,此前从未出现此问题
- 同一代码和文件在另一台配置完全相同(同版本Python、Pandas、openpyxl)的电脑上运行正常,URL显示为非可点击字符串
- 尝试用ChatGPT解决未得到有效方案
代码示例
from openpyxl.styles import PatternFill, colors, Font, Alignment import openpyxl from os import walk import pandas as pd path_1 = r"C:\Users\Jonkim\Desktop\Before" path_2 = r"C:\Users\Jonkim\Desktop\Before\After" f = [] f_name = [] # 仅将工作文件夹中的文件名保存到列表 for (dirpath, dirnames, filenames) in walk(path_1): f.extend(filenames) for i in filenames: temp_i = i.split("No_") if temp_i[0] in f_name: continue else: f_name.append(temp_i[0]) break # 按相同名称分组文件 for j in f_name: group_f = [] for q in f: temp_q = q.split("No_") if j == temp_q[0]: group_f.append(q) else: continue excel = pd.DataFrame() for file_name in group_f: df = pd.read_excel(path_1 + "\\" + file_name) df.dropna(inplace=True) # 删除含空单元格的行 df.drop_duplicates(inplace=True) # 去重 # 最终清理后合并 excel = excel._append(df, ignore_index=True) # 保存最终数据的总行数 las_row = len(excel) # 保存为xlsx excel.to_excel(f"{path_2}\\{j}{las_row}.xlsx", index=False)
解决方案
这个警告的核心原因是Excel单工作表允许的可点击URL上限为65530个,合并后的数据中可点击URL数量超过了该限制。两台电脑表现不同,大概率是因为其中一台的工具默认行为差异(比如URL自动识别的开关状态不同)。以下是几种可行的解决方法:
方法1:禁用自动URL识别,强制保存为纯文本
替换原有excel.to_excel(...)代码,通过openpyxl手动写入数据并强制将字符串设为纯文本,避免自动转换为可点击链接:
# 替换原保存代码部分 from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows wb = Workbook() ws = wb.active # 将DataFrame写入工作表 for r in dataframe_to_rows(excel, index=False, header=True): ws.append(r) # 遍历所有单元格,强制设为纯文本格式 for row in ws.iter_rows(): for cell in row: if cell.data_type == 's': cell.data_type = 'str' wb.save(f"{path_2}\\{j}{las_row}.xlsx")
方法2:提前将URL列转换为纯文本
在读取Excel文件时,直接指定含URL的列为字符串类型,从源头避免URL识别:
# 读取时指定列类型(替换原df = pd.read_excel(...)行) # 将'URL列名'替换为你实际的列名 df = pd.read_excel(path_1 + "\\" + file_name, dtype={'URL列名': str}) # 或者在合并前统一转换 if 'URL列名' in df.columns: df['URL列名'] = df['URL列名'].astype(str)
方法3:临时调整openpyxl的URL阈值(不推荐)
通过修改openpyxl的参数提高允许的URL数量上限,仅适合临时应急,可能存在文件损坏风险:
import openpyxl # 手动提高阈值,需确保不超出Excel实际支持范围 openpyxl.Workbook.max_urls = 100000
额外排查点
- 检查两台电脑的Excel设置:是否开启了「自动检测并创建超链接」功能,这会影响文件打开后的显示状态
- 确认两台电脑合并后的文件中URL实际数量是否一致,排除数据差异问题
内容的提问来源于stack exchange,提问作者Jonkim
相关产品推荐
相关产品推荐

