{{define "head"}} {{/* Drag and drop only. Everything the drop zone does, the form below it already does with scripting off — drop.js fills that same file input and submits that same form, so there is one route, one CSRF check and one code path either way. This moved here with the form it decorates. It used to sit on the sheet list, which is where the import form used to be. */}} {{end}} {{define "content"}}

Import a spreadsheet

{{/* The limits are stated BEFORE the import, not discovered after it. Import reads one worksheet (xlsx.Import), and a workbook with three of them would otherwise arrive looking whole — the quiet kind of wrong PRODUCT.md's first principle forbids. They are a subhead here rather than a hint under the field because this page has the room the dropdown they nearly went in did not, and because drop.js overwrites the hint to speak about a drop — which would take the file limits down with it. */}}

Excel .xlsx or .xlsm, up to 20 MB. The first worksheet is imported.

{{if .Data.Error}} {{/* A refusal renders HERE, on the page holding the form, rather than back on the sheet list. The list is not where the person is and no longer carries a form to try again with. */}}

{{.Data.Error}}

{{end}}

You can also drag a file onto this box.

{{end}}