import os import openpyxl from openpyxl.styles import Alignment SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) FILE_NAME = os.path.join(SCRIPT_DIR, "registration_for_training.xlsx") def fix_shifted_rows(): if not os.path.exists(FILE_NAME): print(f"Файл {FILE_NAME} не найден.") return try: wb = openpyxl.load_workbook(FILE_NAME) ws = wb.active except PermissionError: print("\n[ОШИБКА] Доступ запрещен. Пожалуйста, ЗАКРОЙТЕ файл 'registration_for_training.xlsx' в Excel или других программах и запустите скрипт снова.\n") return except Exception as e: print(f"Ошибка при загрузке файла: {e}") return rows = list(ws.iter_rows(values_only=False)) if len(rows) <= 1: print("В таблице нет данных для исправления (только заголовки).") return changed = False for i in range(1, len(rows)): row_num = i + 1 id_val = ws.cell(row=row_num, column=1).value # If the first cell doesn't start with 'id_', it means this row was written # by the old running server process and needs to be shifted to the right. if id_val and not str(id_val).startswith("id_"): print(f"Исправляем смещение в строке {row_num} для пользователя: '{id_val}'") # Read the 8 fields that were written by the old server old_values = [ws.cell(row=row_num, column=c).value for c in range(1, 9)] # Re-format this row: Column 1 is id_001, columns 2-9 are the shifted fields ws.cell(row=row_num, column=1, value="id_001") for col_idx, val in enumerate(old_values, 2): ws.cell(row=row_num, column=col_idx, value=val) # Clear column 10 in case there is any residue ws.cell(row=row_num, column=10, value=None) # Re-apply styles and alignments data_align_left = Alignment(horizontal="left", vertical="center") data_align_center = Alignment(horizontal="center", vertical="center") for col_idx in range(1, 10): cell = ws.cell(row=row_num, column=col_idx) if col_idx in [2, 4, 5]: cell.alignment = data_align_left else: cell.alignment = data_align_center changed = True if changed: try: wb.save(FILE_NAME) print("\n[УСПЕХ] Все смещенные строки в Excel были автоматически исправлены!") print(f"Файл успешно сохранен: {FILE_NAME}\n") except PermissionError: print("\n[ОШИБКА] Не удалось сохранить файл. Пожалуйста, убедитесь, что файл закрыт в Excel, и попробуйте снова.\n") else: print("Смещенных строк не обнаружено. Все данные соответствуют формату.") if __name__ == "__main__": fix_shifted_rows()