import datetime
import tkinter as tk
from tkinter import messagebox, filedialog
from openpyxl import load_workbook # pip install openpyxl
from functools import partial
class ExcelUpdater:
def __init__(self, filename, sheetname):
"""Инициализация класса и попытка загрузки книги Excel"""
self.filename = filename
self.sheetname = sheetname
self.workbook = None
self.worksheet = None
self.today = datetime.date.today().strftime("%d-%m-%Y")
self.load_workbook()
def load_workbook(self):
"""Загружает файл Excel и рабочий лист, с обработкой ошибок"""
try:
self.workbook = load_workbook(self.filename)
self.worksheet = self.workbook[self.sheetname]
except FileNotFoundError:
messagebox.showerror("Ошибка", f"Файл '{
self.filename}' не найден.")
except KeyError:
messagebox.showerror("Ошибка", f"Лист '{
self.sheetname}' не найден в книге.")
except Exception as e:
messagebox.showerror(
"Ошибка", f"Произошла ошибка при открытии файла: {e}")
def update_cell(self, cell):
"""Обновляет указанную ячейку текущей датой и сохраняет файл"""
if not self.workbook or not self.worksheet:
messagebox.showerror(
"Ошибка", "Невозможно обновить файл. Проверьте, был ли файл корректно загружен.")
return
try:
self.worksheet[cell] = self.today
self.save_and_close()
messagebox.showinfo("Успех", f"Ячейка {cell} обновлена!")
except Exception as e:
messagebox.showerror(
"Ошибка", f"Произошла ошибка при обновлении ячейки: {e}")
def save_and_close(self):
"""Сохраняет изменения в файле и закрывает его"""
try:
self.workbook.save(self.filename)
self.workbook.close()
except Exception as e:
messagebox.showerror("Ошибка", f"Не удалось сохранить файл: {e}")
def select_file():
"""Открывает диалог для выбора файла Excel"""
filetypes = (("Excel files", "*.xlsx"), ("All files", "*.*"))
filename = filedialog.askopenfilename(
title="Выберите файл Excel", filetypes=filetypes)
return filename
def create_button(root, updater, cell):
"""Создаёт кнопку с функцией обновления Excel ячейки"""
button = tk.Button(root, text=f"Update {
cell}", command=partial(updater.update_cell, cell))
button.pack()
def main():
root = tk.Tk()
root.title("Excel Updater")
# Запрашиваем файл через диалоговое окно
filename = select_file()
if not filename:
messagebox.showerror("Ошибка", "Файл не был выбран.")
return
sheetname = 'data_bv' # Название листа, который будет обновляться
# Инициализация класса ExcelUpdater
updater = ExcelUpdater(filename, sheetname)
# Создание нескольких кнопок для обновления разных ячеек
cells = ['A1', 'A2', 'A3', 'A4']
for cell in cells:
create_button(root, updater, cell)
root.mainloop()
if __name__ == "__main__":
main()
today = datetime.date.today ()
fn = 'data.xlsx'
wb = load_workbook(fn)
ws = wb['data_bv']
def bv_time():
ws['A1'] = today.strftime("%d-%m-%Y")
wb.save(fn)
wb.close()