testR1
This commit is contained in:
70
_diag_t3.py
Normal file
70
_diag_t3.py
Normal 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}")
|
||||
Reference in New Issue
Block a user