Files
kadastr-17/_diag_t3.py
2026-03-12 01:50:57 +05:00

71 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Диагностика привязки картинок в Таблице 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}")