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

遍历Excel命名范围时触发KeyError的问题求助

遍历Excel命名范围时触发KeyError的问题求助

我最近写了一段Python脚本,用来批量处理Excel里的命名区域:这些区域从DT_1到DT_30,全部在同一个工作簿的同一张工作表里,命名规则完全统一。脚本的目标是把每个区域转成同名的JPEG图片,保存到指定文件夹里。

但运行的时候出问题了:当脚本处理到DT_25时,直接抛出了KeyError: DT_25。之前我用24个命名区域的版本测试时,也遇到过同样的问题——当时是到DT_24就报错。

我的Python代码:

import matplotlib.pyplot as plt
import openpyxl

wb = openpyxl.load_workbook('C:\\Users\\barry\\Desktop\\WS_Generators\\Stats_WS_Generator_2024 TEST.xlsm', data_only=True)

for i in range(30):
    named_range = wb.defined_names['DT_' + str(i+1)]
    cells = named_range.destinations
    
    # 获取第一个(也是唯一一个)单元格区域
    sheet_name, cell_range = next(cells)
    sheet = wb[sheet_name]
    data = [[cell.value for cell in row] for row in sheet[cell_range]]

    # 创建图表和坐标轴
    fig, ax = plt.subplots(figsize = (3,3), dpi = 400)
    fig.canvas.draw()
    
    # 隐藏坐标轴
    ax.axis('off')
    
    # 创建表格
    table = ax.table(cellText=data, loc='center', cellLoc='center')
    
    # 设置表格属性
    table.auto_set_font_size(False)
    table.set_fontsize(11)
    table.scale(1, 1.5)
    
    # 添加边框并通过bbox减少空白
    for cell in table._cells:
        table._cells[cell].set_edgecolor('black')
        table._cells[cell].set_linewidth(0.5)
    bbox = table.get_window_extent(fig.canvas.get_renderer())
    bbox = bbox.from_extents(bbox.xmin-25, bbox.ymin-25, bbox.xmax+25, bbox.ymax+25)
    bbox_inches = bbox.transformed(fig.dpi_scale_trans.inverted()) 
  
    # 显示表格(注释状态)
    #plt.show()
    
    plt.savefig("C:\\Users\\barry\\Desktop\\WS_Generators\\TempImage\\DT_" + str(i+1) + ".jpg", bbox_inches=bbox_inches, pad_inches = 0.1)
    
    plt.close()

报错回溯信息:

Traceback (most recent call last):

  File ~\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File c:\users\barry\.spyder-py3\python code useful for worksheet generators\table - create table image from excel named range and save several images test01.py:19
    named_range = wb.defined_names['DT_' + str(i+1)]

KeyError: 'DT_25'

我已经做了这些排查:

  • 临时文件夹里已经成功生成了前24张JPEG,每张大小约50KB,格式完全正确;
  • 手动检查了Excel工作簿,DT_25确实存在,命名格式和其他区域完全一致,是一个2×5的数字矩阵,和其他区域没有区别;
  • 用Python打印len(wb.defined_names),结果显示有25个条目;
  • 附上工作簿里所有命名区域的截图:
    Excel命名范围列表

我已经在相关技术社区搜过问题,但没找到解决办法,希望有人能帮我看看问题出在哪?

备注:内容来源于stack exchange,提问作者Mark Barry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 03:19:35