sheets

Export a Sheet's rows as CSV or XLSX.

Downloads the sheet's merged row view (flushed warehouse rows with on-page pending edits applied, the same view the grid shows) as a CSV or XLSX attachment, in ONE engine fetch of up to 10,000 rows (ADR-0091 D5). filters and sort take the same shapes as POST /v1/sheets/{id}/rows/query; columns selects and orders the output (default: every declared column; for a linked sheet, the primary key, then the base relation's columns, then the extension columns -- the grid's order). Linked sheets run under the requester's own caller token and are refused without one; off-page pending edits are not hydrated.

Authorization mirrors the table export: sheet:read, data:query AND data:export (403 otherwise), then read access to the sheet (404 for a caller who cannot read it, exactly like rows/query). System actors are refused (403) and render sessions never reach this route (404). Every successful export writes a data.export audit entry (resource type sheet; format, row count, truncated).

style: formatted (xlsx only; csv is refused 400) bakes the panel's conditional-format rules as static cell styles, using the table export's serializer (DVT-4196): the client sends the rules, resolved theme tokens and frozenColumns (same shapes and bounds as POST /v1/data/export); the server never reads the dashboard spec. The rules evaluate over the exported rows after formula neutralisation, so a text predicate sees the '-prefixed value of a cell that started with =, +, - or @. The truncation notice row is never styled. Rules x rows over the style budget is 422 export-too-complex. Text cells whose first character is =, +, -, @, tab or CR are prefixed with ' in BOTH formats so a spreadsheet never evaluates them as formulas. Numbers, booleans and dates are written typed from the sheet's declared column kinds, never sniffed from strings.

X-DVT-Truncated: true marks a result cut at 10,000 rows (or the byte cap); a truncated XLSX also ends with one plain-text notice row (not counted in X-DVT-Row-Count). If the warehouse statement exceeds the ~20 s export budget, or the server's 24 s engine deadline or 28 s whole-request deadline passes, the response is 422 sheet_export_timeout -- never a 504 and never a partial file. A linked sheet whose pending edits were truncated is refused 503 rather than exported without them.

post/v1/sheets/{id}/export

Request

  • Base URL: http://localhost:8080
  • URL: http://localhost:8080/v1/sheets/{id}/export
  • Auth: one of:
    • API key in cookie dvt_session
    • HTTP bearer

Request body

format'csv' | 'xlsx' required
style'data' | 'formatted'

formatted (xlsx only; 400 for csv) bakes conditionalFormat as static cell styles (DVT-5185).

frozenColumnsinteger

Freezes the first N output columns (clamped to the column count). Formatted style only.

tokensobject

The client's RESOLVED theme token map ({token.name} -> literal), as in ExportRequest.tokens. Formatted style only.

columnsstring[]

Declared sheet column names to export, in output order (each at most once). Default: every declared column, in declaration order.

Response

The serialized export file (CSV or XLSX) as an attachment.

Changes

No recorded changes to this operation across all 1 revision of this API.