UI xlsx import api

This commit is contained in:
va1is 2025-10-28 11:10:08 +03:00
parent 8d14f2e22a
commit 0fb2655eea
2 changed files with 57 additions and 7 deletions

View File

@ -0,0 +1,3 @@
[
"http://localhost:3005"
]

View File

@ -272,16 +272,37 @@ class ImportApp(QMainWindow):
if not path:
return
try:
wb = openpyxl.load_workbook(path)
wb = openpyxl.load_workbook(path, data_only=True)
sheet = wb.active
self.display_sheet(sheet)
# === читаем ВСЕ строки для обработки ===
all_data = [list(r) for r in sheet.iter_rows(values_only=True)]
if not all_data:
self.log("⚠️ Файл пуст.")
return
self.headers = [str(h) if h else "" for h in all_data[0]]
self.loaded_data = all_data # ВСЁ содержимое для дальнейшей работы
# === только первые 50 строк показываем в таблице ===
preview_data = all_data[:51]
self.table.clear()
self.table.setRowCount(0)
self.table.setColumnCount(len(self.headers))
self.table.setHorizontalHeaderLabels(self.headers)
for r_idx, row in enumerate(preview_data[1:], start=0):
self.table.insertRow(r_idx)
for c_idx, value in enumerate(row):
self.table.setItem(r_idx, c_idx, QTableWidgetItem("" if value is None else str(value)))
self.log(f"📄 Загружен файл: {os.path.basename(path)} ({sheet.max_row} строк)")
# обновим список заголовков в таблице сопоставления
self.populate_map_table()
except Exception as e:
self.log(f"❌ Ошибка при чтении файла: {e}")
def display_sheet(self, sheet):
self.table.clear()
self.table.setRowCount(0)
@ -358,14 +379,40 @@ class ImportApp(QMainWindow):
origin_col = mapping.get("originPath", "")
path_col = mapping.get("path", "")
result = []
seen_origins = set()
idx_origin = self.headers.index(origin_col) if origin_col in self.headers else -1
idx_path = self.headers.index(path_col) if path_col in self.headers else -1
for r in rows:
origin_val = (str(r[idx_origin]).strip() if idx_origin >= 0 and idx_origin < len(r) and r[idx_origin] else "")
path_val = (str(r[idx_path]).strip() if idx_path >= 0 and idx_path < len(r) and r[idx_path] else "")
if origin_val or path_val:
result.append({"originPath": origin_val, "path": path_val})
origin_val = (
str(r[idx_origin]).strip()
if idx_origin >= 0 and idx_origin < len(r) and r[idx_origin]
else ""
)
path_val = (
str(r[idx_path]).strip()
if idx_path >= 0 and idx_path < len(r) and r[idx_path]
else ""
)
# пропускаем полностью пустые строки
if not origin_val and not path_val:
continue
# если originPath уже был, пропускаем (оставляем только первое вхождение)
if origin_val in seen_origins:
continue
seen_origins.add(origin_val)
# нормализуем разделители (чисто косметически)
path_val = " > ".join([p.strip() for p in path_val.split(">")])
result.append({"originPath": origin_val, "path": path_val})
self.log(f"🧩 Найдено уникальных originPath: {len(result)}")
# ===== PRODUCTS =====
else: