Openpyxl, Telegram. Выбор активного листа в цикле for

С помощью openpyxl получаю файл(читаю его). С помощью цикла получаю все наименования листов. Далее делаю команду, по которой вывожу данные из листа

import openpyxl

from aiogram import Router, F
from aiogram.types import Message
from aiogram.filters import Command, CommandStart

from keyboards import reply, inline

router = Router()
wb = openpyxl.reader.excel.load_workbook(filename = "data/Inventarization 2023.xlsx", data_only = True)

for item in wb.sheetnames:
sheet = wb[item]

@router.message((F.text == item))
async def agent (message: Message):
print(sheet)
text = ""
for i in range (11, 312):
    text += f"? № {sheet['B' + str(i)].value}\n? Дата ввода: {sheet['C' + str(i)].value}\n✏️ Серийный номер: {sheet['D' + str(i)].value}\n? Инвентарный номер: {sheet['E' + str(i)].value}\n? Наименование: {sheet['F' + str(i)].value}\n? Кабинет: {sheet['G' + str(i)].value}\n? Примечание: {sheet['H' + str(i)].value}\n\n"
for x in range(0, len(text), 4096):
    mess = text[x: x + 4096]        
    await message.answer(mess)

Есть 2 проблемы.

  1. Выводит всегда только последний лист, я пробовал добавлять команду в цикл, всё равно также, только последний лист. (У меня их там 30)

  2. Если даже получится вывести все листы помощью команды, то как сделать выбору строк? В данный момент у меня вывод строк идёт с 11 по 312, но не в каждом листе есть 312 строк.

    for i in range (11, 312):
    

Ответы (1 шт):

Автор решения: AndreyKaO

Оказалось намного проще. openpyxl всё верно выдаёт и проходит цикл, но вот уже в aiogram есть нюанс.

sheet = wb[item]

Здесь в принципе почти всё верно, но вместо item нужно использовать метод от aiogram message.text.

sheet = wb[message.text]

Со вторым вопрос, есть метод у openpyxl max_row, можно использовать wb.max_row Либо же уже через sheet["A1:A+"], что означает по последней строке.

→ Ссылка