This commit is contained in:
2026-03-12 01:50:57 +05:00
parent ec82b528a3
commit c33befe7c2
12 changed files with 1553 additions and 69 deletions

70
_diag_t3.py Normal file
View File

@@ -0,0 +1,70 @@
"""Диагностика привязки картинок в Таблице 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}")