"""Диагностика привязки картинок в Таблице 3.""" import zipfile from xml.etree import ElementTree as ET t3_path = "data/Исх.данные/Таблица 3 ( для схем).xlsx" with zipfile.ZipFile(t3_path, 'r') as z: draw_xml = z.read("xl/drawings/drawing1.xml").decode("utf-8") rels_xml = z.read("xl/drawings/_rels/drawing1.xml.rels").decode("utf-8") rels_root = ET.fromstring(rels_xml) rels = {} for rel in rels_root: rid = rel.get("Id") rels[rid] = rel.get("Target") print("Первые 5 rels:", list(rels.items())[:5]) draw_root = ET.fromstring(draw_xml) ns = { 'xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', } results = [] for anchor in draw_root: tag = anchor.tag.split('}')[-1] if 'Anchor' not in tag: continue from_el = anchor.find('xdr:from', ns) if from_el is None: continue col = int(from_el.find('xdr:col', ns).text) row = int(from_el.find('xdr:row', ns).text) pic = anchor.find('.//xdr:pic', ns) if pic is None: continue blip = pic.find('.//a:blip', ns) if blip is None: continue rid = blip.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}embed') img_file = rels.get(rid, "?") results.append((row, col, rid, img_file)) results.sort() print(f"\nВсего картинок: {len(results)}") for r, c, rid, img in results: print(f" row={r} col={c} rId={rid} -> {img}") # Теперь соотнесём строки с именами ZU print("\n--- Строки Таблицы 3 с именами ZU ---") from openpyxl import load_workbook wb = load_workbook(t3_path, data_only=True) ws = wb.active zu_rows = {} for i, row in enumerate(ws.iter_rows(values_only=True)): row_1based = i + 1 zu_name = row[5] # колонка F (индекс 5) if zu_name and str(zu_name).strip().startswith("выявл"): zu_rows[row_1based] = str(zu_name).strip() print(f" Строка {row_1based}: {zu_name}") # Соответствие картинок → ZU # картинки в row (0-based) → строка (1-based) = row+1 print("\n--- Сопоставление картинок с ZU ---") for img_row_0based, col, rid, img_file in results: img_row_1based = img_row_0based + 1 # Найти ближайшую ZU-строку выше или равно header_row = max((r for r in zu_rows if r <= img_row_1based), default=None) zu_name = zu_rows.get(header_row, "?") print(f" image {img_file} (row_0b={img_row_0based}) → ZU: {zu_name}")