""" Анализ проблемных строк в XLSX файле для импорта. Показывает первые 30 строк с проблемными телефонами. """ from django.core.management.base import BaseCommand import os try: from openpyxl import load_workbook except ImportError: load_workbook = None class Command(BaseCommand): help = 'Анализ проблемных данных в файле импорта' def add_arguments(self, parser): parser.add_argument('file_path', type=str, help='Путь к файлу для анализа') def handle(self, *args, **options): file_path = options['file_path'] if not os.path.exists(file_path): self.stdout.write(self.style.ERROR(f'Файл не найден: {file_path}')) return if load_workbook is None: self.stdout.write(self.style.ERROR('Установите openpyxl')) return wb = load_workbook(file_path, read_only=True, data_only=True) ws = wb.active headers = [] rows_data = [] first_row = True for idx, row in enumerate(ws.iter_rows(values_only=True), start=1): if first_row: headers = [str(v).strip() if v is not None else "" for v in row] self.stdout.write(f"Заголовки: {headers}\n") first_row = False continue if not any(row): continue row_dict = {} for col_idx, value in enumerate(row): if col_idx < len(headers): header = headers[col_idx] row_dict[header] = value rows_data.append((idx, row_dict)) # Показываем первые 30 строк self.stdout.write(self.style.SUCCESS(f"\nПервые 30 строк данных:\n")) self.stdout.write("=" * 100) for row_num, data in rows_data[:30]: self.stdout.write(f"\n[Строка {row_num}]") for key, val in data.items(): if val: self.stdout.write(f" {key}: {val}") self.stdout.write("-" * 100) self.stdout.write(f"\n\nВсего строк с данными: {len(rows_data)}")