@SKD115

Бот после изменения файла эксель использует старую версию до перезапуска. Как исправить?

Проблема вот в чем после сохранения в def echo_message бот будет использовать старый файл эксель то есть тот который был до изменения, но при этом если его открыть сам эксель файл после изменения то там будет уже измененный. Подскажите либо как пофиксить либо как должен выглядеть код после wb.save в def echo_message который перезапускал бы прогу.

import telebot
import time
from telebot import types
import openpyxl
from openpyxl import load_workbook

workbook = load_workbook(filename="nname.xlsx")

global b1
b1 = 0

A_stlb = []
B_stlb = []

sheet = workbook.active
i1 = 1
i = 1
while i < 20:
    x = 'A' + str(i)
    a = sheet[x].value
    A_stlb.append(a)
    i += 1

while i1 < 20:
    y = 'B' + str(i1)
    a = sheet[y].value
    B_stlb.append(a)
    i1 += 1

bot = telebot.TeleBot('bot1212121212')


@bot.message_handler(commands=['start'])  # Приветсвие и выбор действия
def main(message):
    bot.send_message(message.chat.id, f'Доброго времени суток, {message.from_user.username}')
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton(text='Перейти на сайт', url='https://www.youtube.com/watch?v=dQw4w9WgXcQ'))
    markup.add(types.InlineKeyboardButton(text="Проверить наличие", callback_data='search'))
    markup.add(types.InlineKeyboardButton('Взять электронику', callback_data='take'))
    bot.send_message(message.chat.id, 'Выберите дейстивие', reply_markup=markup)


@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == 'search':
        sent = bot.send_message(call.message.chat.id, "Введите название ")
        bot.register_next_step_handler(sent, review)
    elif call.data == 'take':
        sent2 = bot.send_message(call.message.chat.id, "Введите название 2")
        bot.register_next_step_handler(sent2, review2)



def review(message):
    message_to_save = message.text
    b = message_to_save
    if A_stlb.count(b):
        index = A_stlb.index(b)
        index2 = B_stlb[index]
        bot.send_message(message.chat.id, 'Количество в наличие = ' + str(index2))
        print('Количество', index2)
    else:
        bot.send_message(message.chat.id, 'Нет в наличие')
        print("Нет в наличие")


def review2(message):
    message_to_save = message.text
    global b
    b = message_to_save
    print('b', b)
    if A_stlb.count(b):
        index = A_stlb.index(b)
        index2 = B_stlb[index]
        bot.send_message(message.chat.id, 'Количество в наличие = ' + str(index2))
        sent2 = bot.send_message(message.chat.id, 'Введите количество')
        bot.register_next_step_handler(sent2, echo_message)

        print('Количество', index2)

    else:
        bot.send_message(message.chat.id, 'Нет в наличие')
        print("Нет в наличие")

wb = load_workbook(filename="nname.xlsx")
ws = wb['Лист1']

@bot.message_handler(func=lambda message: True)
def echo_message(message):
    b2 = int(message.text)
    print('b2', b2)
    print('b1', b)
    if A_stlb.count(b):
        index_p = A_stlb.index(b)
        index_p2 = B_stlb[index_p]
        print('dddd')
        print(b2)
        z = 'B' + str(index_p + 1)
        ws[z] = index_p2 - b2
        bot.send_message(message.chat.id, 'Ваш запрос учтён')
        print(ws[z].value)
        wb.save('nname.xlsx')

    else:
        print('Нет в наличие2')

if __name__ == '__main__':
    while True:
        try:
            bot.polling(none_stop=True)
        except Exception as e:
            time.sleep(3)
            print(e)

wb.save('nname.xlsx')
  • Вопрос задан
  • 36 просмотров
Решения вопроса 1
fenrir1121
@fenrir1121
Начни с документации
Читать файл не при старте приложения, а в нужной функции.

Но лучше слезть заранее с этого велосипеда с квадратными колесами и использовать БД. В случае двух и более одновременных запросов результаты будут не те что вам хотелось бы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы