You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:46:14