File formats

Detection is by filename:

  • .xlsx / .xls → workbook path (with multi-sheet picker when needed)
  • .tsv / .tab → tab-delimited
  • otherwise → delimited text (CSV)

Delimiter detection

For CSV-class files, the first non-empty line is scored for comma, semicolon, tab, and pipe. The strongest count wins. That covers US exports (,), many European exports (;), and pipe-delimited dumps (|). UTF-8 BOM on the first header is stripped.

Semicolon files also infer European number locale under numberLocale="auto" (for example bare 1.234 as thousands). Override with numberLocale="us" or "eu" when you know the audience.

Schema template

Once fields are known, the upload step can download template.csv in the browser from the local or hosted schema. Headers are field labels, or keys when a label is empty. One example row is filled from field type (email, number, date, enum, boolean, url, string). Same client-side download helper as error export; no server file store.

Headers and rows

CSV/TSV use Papa Parse. Empty lines are skipped. Fully blank rows are dropped. Headers are trimmed; blank headers become Column N; duplicate headers become Name (2), etc.

XLSX uses SheetJS. See Excel.

There is no hard-coded max file size or row count in the package. Very large files are limited by the browser.

Related: Excel · React component · Limits · Validation · CSV vs XLSX