74 lines
3.3 KiB
Python
74 lines
3.3 KiB
Python
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()
|