Получение KeyError при переборе Python именованных диапазонов ExcelPython

Программы на Python
Ответить
Anonymous
 Получение KeyError при переборе Python именованных диапазонов Excel

Сообщение Anonymous »

У меня есть скрипт Python, который перебирает набор именованных диапазонов Excel (DT_1, DT_2,... DT_30). Все диапазоны находятся в одной книге, на одном листе и имеют систематические имена. Скрипт сохраняет каждый диапазон в формате JPEG с именами файлов «DT_1», «DT_2» и т. д. все вместе в одной папке. Имеется 30 именованных диапазонов. Когда сценарий достигает DT_25, он выдает ошибку KeyError: DT_25.
Код 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

# Get the first (and only) cell range
sheet_name, cell_range = next(cells)
sheet = wb[sheet_name]
data = [[cell.value for cell in row] for row in sheet[cell_range]]

# Create a figure and axis
fig, ax = plt.subplots(figsize = (3,3), dpi = 400)
fig.canvas.draw()

# Hide axes
ax.axis('off')

# Create table
table = ax.table(cellText=data, loc='center', cellLoc='center')

# Set table properties
table.auto_set_font_size(False)
table.set_fontsize(11)
table.scale(1, 1.5)

# Add borders and decrease white space with 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())

#Show the table
#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()
Я просмотрел все, включая SO, но ничего. В предыдущей версии этой программы я использовал 24 именованных диапазона и получил ошибку KeyError: DT_24. Вот обратная связь:

Код: Выделить всё

 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'
Временная папка, в которой сохраняются файлы JPG, содержит первые 24 файла JPG в точности так, как было запрошено. Размер JPG составляет около 50 КБ каждый. Я дважды проверил, что диапазон DT_25 существует и имеет такое же имя, как и все остальные. Это матрица чисел размером 2x5, мало чем отличающаяся от других именованных диапазонов.

Подробнее здесь: https://stackoverflow.com/questions/793 ... med-ranges
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»