0; function h(mixed $value): string { return htmlspecialchars((string) ($value ?? ''), ENT_QUOTES, 'UTF-8'); } function renderCell(mixed $value): string { if ($value === null || $value === '') { return ''; } return h($value); } function flashClasses(?array $flash): string { $type = (string) ($flash['type'] ?? 'info'); return match ($type) { 'success' => 'border-emerald-200 bg-emerald-50 text-emerald-900', 'danger' => 'border-rose-200 bg-rose-50 text-rose-900', 'warning' => 'border-amber-200 bg-amber-50 text-amber-900', default => 'border-sky-200 bg-sky-50 text-sky-900', }; } ?> <?= h($appName) ?>
Stage 1

Upload an Excel workbook, wipe the current imported dataset, process the rows, and review the stored results with derived fields.

Current imported rows
Showing a preview of the latest row(s).

Upload and import

The previous imported data is cleared before the new workbook is inserted.

Supported files: .xls and .xlsx.

Ready to import 0%
Rows detected: 0 Chunk size:
Open full table
1 Validate file
2 Wipe existing rows
3 Normalize and derive fields
4 Store in PostgreSQL
5 Review preview table

Imported data preview

Showing of row(s)
Row
$previewLimit): ?>
Preview is limited to row(s). Open the full table for search and pagination.
Go to full table
No data loaded

Choose an Excel workbook and run the import to display the latest processed rows here.