Board Export
Horizon allows exporting board contents in two different formats:
- PNG snapshot — screenshot of the board canvas
- XLSX — Excel file containing all widget data
Both formats are triggered via Captain AI chat; XLSX can also be downloaded manually.
Prerequisite
The board must contain at least one widget with data loaded.
1. PNG Snapshot
The board canvas is wrapped in a RepaintBoundary widget. When a snapshot is taken:
| Step | Detail |
|---|---|
| 1 | Board image is captured via RepaintBoundary.toImage() |
| 2 | Encoded to PNG as ByteData |
| 3 | Converted to a base64 string |
| 4 | Attached to a Captain AI message or offered to the user as a download link |
Browser Download
PNG download happens in the browser via Blob URL:
File name template: Board_<BoardName>_<yyyyMMdd_HHmmss>.png
2. XLSX Export
The XLSX file is produced with the syncfusion_flutter_xlsio package. Data contributions from all widgets are collected via the KpiExportable interface.
| Step | Detail |
|---|---|
| 1 | All widgets are walked; those implementing KpiExportable provide data |
| 2 | A separate sheet is created per widget |
| 3 | The sheet name is derived from the widget name (special characters escaped) |
| 4 | The workbook is built via ExportWriter.buildWorkbookBase64(sheets: sheets) |
| 5 | The base64 file is downloaded in the browser |
File name template: Board_<BoardName>_<yyyyMMdd_HHmmss>.xlsx
2.1 Sheet Contents
| Widget Type | Sheet Structure |
|---|---|
| Cartesian | X column + one Y column per series |
| Circular | Two columns: label + value |
| DataGrid | All visible columns as is |
| Gauge | Single cell — label + value |
| Dynamic Text | Single cell — label + value |
| Two-Column List | Two columns: Label + Value |
| Static Text | No sheet generated (no data) |
3. Triggering the Export
Currently the Horizon UI has no direct Export button; export is triggered:
- Via the Captain AI chat dialog — the chat with AI auto-generates an XLSX and attaches it to the message; the XLSX is offered for download alongside the AI response.
- (In some versions) the Download icon in the board top bar — direct XLSX download.
PDF Support
There is no separate PDF export channel; the board can be exported via the browser's Print → Save as PDF. For more sophisticated PDFs, prefer the Atlas module's public link.
4. Data Filtering
Export uses the active global filter values at the time of export. That is:
- If you set
:start = 2026-05-01in the filter panel, the XLSX contains data only from that date onwards. - If no value is entered, defaults are used.
- After changing filter values, click Apply before exporting.
5. File Size
| Factor | Effect |
|---|---|
| Widget count | Each widget adds a sheet |
| Number of data rows | A large query result enlarges the XLSX |
| Embedded format | XLSX is downloaded via base64 in memory |
Very Large Queries
Queries with 100k+ rows can freeze the browser. For such reports, add LIMIT in Compass or store as a table on the backend.
6. Common Errors
| Symptom | Possible Cause | Solution |
|---|---|---|
| XLSX download not triggered | Captain AI did not respond | Check the Langflow service |
| PNG image is blank | RepaintBoundary failed to render (CORS / off-screen) | Refresh the page and try again |
| Sheet name not visible | Widget name has only special characters | Update the name in Cartography |
| Turkish character issue in file name | Download name encoding broken | Restart the browser |
7. Next Step
→ Share