XLSX and CSV file format

The schema of the round-trip workbook.

Daxlate exports translations as either XLSX (via ClosedXML) or CSV (via CsvHelper). Both formats share a column layout. XLSX adds a header sheet and visual treatment, while CSV is the canonical comma-separated form.

XLSX layout #

A single worksheet named Translations:

RowContents
1Schema-version marker in cell A1 (Daxlate/1.0, italic, gray)
2Header row, bold, with a beige background
3+One row per translatable object

The header row freezes so column titles stay visible as the translator scrolls. The first four columns also freeze so the identity columns stay visible as they scroll right across the culture columns.

Columns #

Four fixed informational columns come first:

ColumnNotes
Object IDImport-time identity key. Do not edit.
TypeOne of Table, Column, Measure, Hierarchy, Level.
ParentContaining object’s name (e.g. the table a measure lives in).
NameThe object’s name in the model (the default-culture caption).

Then, for each culture in the model, two columns:

Caption ({culture})    Description ({culture})

The model’s default culture columns get a shaded background so it’s clear which column is the source of truth.

Object ID convention #

Daxlate composes IDs from the object’s kind and qualified name:

KindFormExample
Tablet.{Name}t.Sales
Columnc.{Table}.{Name}c.Sales.Revenue
Measurem.{Table}.{Name}m.Sales.Total Revenue
Hierarchyh.{Table}.{Name}h.Date.Calendar
Hierarchy Level{HierarchyId}.l{Ordinal}h.Date.Calendar.l1

Renaming an object in the model changes its ID. On re-import, rows with an unknown Object ID are surfaced as warnings in the preview dialog and skipped; the import does not silently drop them.

Schema version #

Cell A1 of the XLSX (or the first comment line of the CSV) carries the schema version. The reader rejects files from a newer major version with a clear warning and treats missing markers as 1.0 for back-compat with exports made before versioning was added.

The current marker is Daxlate/1.0. Bumps are minor for additive columns (new columns are ignored with a warning) and major for breaking changes (e.g. a different Object ID convention).

CSV layout #

CSV uses the same column layout, comma-separated. Line 1 holds the schema marker as a comment:

# Daxlate/1.0
Object ID,Type,Parent,Name,Caption (en-US),Description (en-US),Caption (fr-FR),Description (fr-FR)
t.Sales,Table,,Sales,Sales,,Ventes,
c.Sales.Revenue,Column,Sales,Revenue,Revenue,,Chiffre d'affaires,

UTF-8 with BOM, CRLF line endings, for Excel double-click compatibility.

Empty cells #

Empty cells in an import file are not a sentinel for “leave as is”. They mean “set this translation to empty”. The import preview surfaces this as a change count; nothing is overwritten silently. See Excel round-trip for the full re-import flow.