Как сделать так, чтобы бот принимал Excel файл, который отправит ему пользователь?
Мне это нужно для того, чтобы измененные данные из эксель можно было внести обратно в postgreSQL Я уже много способов попробовал: и через dp.message_handler(content_types=...) и так без этого. Я чего-то не понимаю однозначно...
@dp.callback_query_handler(text="redact")
async def redact_ex(message: types.Message):
markup_redact = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True,
one_time_keyboard=True)
red_del = types.InlineKeyboardButton('Удалить данные')
red_last = types.InlineKeyboardButton('Перезаписать последние данные')
red_excel = types.InlineKeyboardButton('Внести Excel')
markup_redact.add(red_del, red_last, red_excel)
await bot.send_message(message.from_user.id, '''✍️*В редактировании можно выполнить
несколько команд:*
❌Удалить данные - удаляются все данные
?Перезаписать последние данные - последние данные, которые вы ввели можно изменить,
если допустили ошибку
?Внести Excel - вытекающее из функции "Выслать", если вы самостоятельно редатировали
xlsx, xsl файлы, их можно внести обратно''', parse_mode='Markdown',
reply_markup=markup_redact)
await Statess.red_set.set()
@dp.message_handler(state=Statess.red_set)
async def red_del_func(message: types.Message, state: FSMContext):
db = psycopg2.connect(dbname='TelegramFinanseBot', user='postgres', # ноутбук
password='KokoRari-23', host='localhost', port='5432')
# db = psycopg2.connect(dbname='TelegramFinanseBot', user='postgres', #Комп
# password='Ghg3500pol', host='localhost', port='5432')
cur = db.cursor()
async with state.proxy() as delete_dt:
user_red = str(message.from_user.id)
print(user_red)
if message.text == 'Удалить данные':
markup_del_red = types.InlineKeyboardMarkup(row_width=2)
btn_del_red = types.InlineKeyboardButton("Вернуться в главное меню", callback_data="helpmsg")
markup_del_red.add(btn_del_red)
cur.execute(f'''DELETE FROM "{user_red}"''')
db.commit()
db.close()
await bot.send_message(message.from_user.id, '''Данные были полностью удалены из базы!''', reply_markup=markup_del_red)
await state.finish()
if message.text == 'Перезаписать последние данные':
markup_vvod = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True, one_time_keyboard=True)
btn_vvod = types.InlineKeyboardButton('Ввод')
markup_vvod.add(btn_vvod)
await bot.send_message(message.from_user.id, '''Введите любое сообщение для подтверждения''', reply_markup=markup_vvod)
await Statess.red_enter.set()
if message.text == 'Внести Excel':
await bot.send_message(message.from_user.id, '''Внесите Excel файл:''')
# msg = await bot.send_document(message.from_user.id, file_msg)
file_info = await bot.get_file(message.document.file_id)
print(file_info)
file = await bot.download_file(file_info.file_path)
df = pd.read_excel(file)
# @dp.message_handler(content_types=types.ContentType.DOCUMENT)
# async def excel_form(message: types.Message):
print("Сюда переходит, ты просто лошара")
markup_del_red = types.InlineKeyboardMarkup(row_width=2)
btn_del_red = types.InlineKeyboardButton("Вернуться в главное меню", callback_data="helpmsg")
markup_del_red.add(btn_del_red)
db = psycopg2.connect(dbname='TelegramFinanseBot', user='postgres', # ноутбук
password='KokoRari-23', host='localhost', port='5432')
# db = psycopg2.connect(dbname='TelegramFinanseBot', user='postgres', #Комп
# password='Ghg3500pol', host='localhost', port='5432')
cur = db.cursor()
user_xls = str(message.from_user.id)
# doc = message.document
# file_name = doc.file_name
# file_id = doc.file_id
# # file_path = await message.download_file_by_id(message.document.file_id)
# file_info = await bot.get_file(file_id)
# file_path = file_info.file_path
# download_f = await bot.download_file(file_path)
# wb = openpyxl.load_workbook(filename=download_f)
# ws = wb.active
# rows_xls = ws.rows
for row_xls in df.itertuples():
# values_xls = [cell.value for cell in row_xls]
cur.execute(f'''INSERT INTO "{user_xls}" (Категория, Примечания, ЗП_РС, Размер, Карта_Нал, time) VALUES(%s, %s, %s, %s, %s, %s)''', (row_xls[0], row_xls[1], row_xls[2], row_xls[3], row_xls[4]))
db.commit()
db.close()
bot.send_message(message.from_user.id, '''Данные из Excel файла были успешно внесены в базу!''', reply_markup=markup_del_red)
# await state.finish()