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', }; } ?>
Upload an Excel workbook, wipe the current imported dataset, process the rows, and review the stored results with derived fields.
The previous imported data is cleared before the new workbook is inserted.
= $hasData ? 'Showing the latest 20 rows from the current batch.' : 'No imported data yet. Upload a workbook to populate the table.' ?>
| Row | = h($header) ?> |
|---|---|
| = number_format((int) $row['row_number']) ?> | = renderCell($row['merged_row'][$header] ?? null) ?> |
Choose an Excel workbook and run the import to display the latest processed rows here.