# The import report's line forms > Generated by `npm run gen:ai-pack` (scripts/ai-pack.ts) — do not edit. From `import-report.ts`, `format-leaves.ts` (`renderIssue`) and `scripts/axmo-check.ts`. The Import dialog shows one report after every import; **Copy report** copies it as plain text, and the check tool prints the same text. It is the whole check for a chat that cannot run code. ## The report - A clean report is one line: `No issues.` - Otherwise three sections, in order, each opened by its heading line: `Import`, `Compile`, `Update`. - A section that ran and found nothing: `no issues`. A section that did not run: `not run — the import was refused`, or `not run — a definition-only import does not update`. - Every other line is one issue: `{severity}[{CODE}]: …`, severity `error` or `warning`, the code one of `error-codes.md`. Its head, for example: `error[FORMAT_UNKNOWN_KEY]: `. ## An issue line - **Import** (what reading the file found): `{severity}[{CODE}]: {path} [{line}:{col}]: {what} | expected {expected} | got {got}` — the path from the document's root, dot-separated; `[?:?]` when the place could not be found; the `expected` and `got` parts only when there is something to say. For example: ``` error[FORMAT_UNKNOWN_KEY]: series.Sales.formla [12:5]: unknown key | expected one of: "type", "formula", "description", "dimensions" ``` - **Compile** and **Update**: `{severity}[{CODE}]: {path} [{line}:{col}]: {message}` when the issue is about an object the file holds (`series.Sales`, `dataLoaders.loader_1`, `outputRanges.Report`); `{severity}[{CODE}]: {cell}: {message}` for a sheet cell (a `DS.DATA` call); `{severity}[{CODE}]: {message}` otherwise. - A line beginning with two spaces and `·` belongs to the issue line above it (a reason, a detail). - With `--strict` (the check tool and `apply`), the report's last line is `(checked with --strict: a warning counts as an error)`, whatever the report holds. ## The check tool's results - `--values`: after the report, one block per output range, by name: the heading `Output range "{name}" at {Sheet}!{A1}:{F25}`, then its rows, tab-separated, as written (numbers unformatted, an error cell as its marker). A range that wrote nothing: `Output range "{name}" at {anchor}: (wrote nothing)`. - `--series {name}`: the heading `Series "{name}" by {Dimension}, …`, then one line per coordinate that holds a value: the element of each dimension, then the value, tab-separated, in each dimension's element order. - `--series {name} --at "{Dimension}={element};…"`: the same lines, only at those elements; a dimension not named prints all of its elements. - When the import built no model: `Results: none — the import built no model`. On standard error: an unknown series name, `axmo:check: no series named "{name}"`; an `--at` the series cannot answer, `axmo:check: --at for series "{name}": no element "{element}" in "{Dimension}"`. ## The workbook tool (`axmo-workbook`) `extract`'s and `apply`'s refusals of a workbook, each one line: - `error[WORKBOOK_UNREADABLE]: the file is not a workbook this tool can read (an .xlsx package holding xl/workbook.xml).` - `error[WORKBOOK_NOT_AXMO]: the workbook holds no Axmo model: it is not an Axmo workbook, or it was saved by a tool that removed the model (openpyxl, pandas, ExcelJS and SheetJS all remove it).` - `error[WORKBOOK_DEFINITION_UNREADABLE]: the workbook's model could not be read: {the restore's reason}` - `error[WORKBOOK_DEFINITION_TOO_NEW]: the workbook's model was saved in definition version {n}, newer than this tool reads (version 1). Use a newer tool.` - `error[WORKBOOK_MODEL_NOT_WRITABLE]: {dataSources.Name}: the model stores "{value}" as {field}, which the file format does not have, so the model cannot be written as a file. Repair it in the add-in, then export again.` A workbook whose model was read with an object left out (AGL9-25: a stored fault in one object never stops a workbook opening) is extracted as it opened, and each object left out is a warning before the closing line: - `warning[WORKBOOK_OBJECT_LEFT_OUT]: {series.Name}: {its definition error} It is not in the model.yaml written.` `extract` done: `Wrote {dir}/model.yaml and {dir}/dsdata.yaml (2 DS.DATA calls).`, and at `--depth complete` the line `The data section holds the input cells as the workbook was last saved: the next Update in Excel calculates from the cells as they are then.` Before them, at `--depth complete`, the warnings (the exit code stays `0`): - `warning[EXTRACT_DATA_NOT_READ]: the input cells could not be read (data source "{source}": {why}), so the data section is empty, as the add-in's Export writes it then.` - `warning[EXTRACT_FORMULA_NOT_CALCULATED]: 2 formula cells in the data hold no saved value (the workbook was saved by a tool that does not calculate), so the data section holds them empty: {Sheet}!{B7}, {Sheet}!{B8}. Open and save the workbook in Excel to calculate them.` `dsdata.yaml`: `calls:`, a list; each call's `sheet`, `cell`, `ref` (the spill's range as saved), `formula`, its arguments by `DS.DATA`'s own parameter names — `rowBlock`, `colBlock`, `exclFilter`, each the text of the formula's string literal, `null` where an argument is not text — and `cached`, the top-left value as last saved. `apply`'s own lines, after the check's report and the line `Apply` (or `no issues`): - `error[APPLY_SOURCE_NOT_IN_WORKBOOK]: dataSources.{source} [{line}:{col}]: Data source "{source}" refers to "{reference}", which this workbook does not hold: no table or name "{reference}".` - `warning[APPLY_DATA_NOT_APPLIED]: the file's data section was not applied — input cells are changed only in Excel.` - `warning[APPLY_LOADER_COLUMN_NOT_IN_WORKBOOK]: dataLoaders.{loader} [{line}:{col}]: SeriesLoader "{loader}": value column "{column}" not found in data source "{source}", in the workbook's cells as last saved.` - `warning[APPLY_OUTPUT_SHEET_NOT_IN_WORKBOOK]: outputRanges.{name} [{line}:{col}]: Output Range "{name}" is anchored on sheet "{Sheet}", which this workbook does not hold. Update does not create a sheet: add it in Excel before Update, or the range is not written.` - `warning[APPLY_OUTPUT_RANGE_REMOVED]: Output Range "{name}" is not in the new model (removed or renamed). The cells it last wrote, {Sheet}!{A1}:{F25}, stay until you clear them in Excel.` - `warning[APPLY_OUTPUT_RANGE_MOVED]: Output Range "{name}" moved from {Sheet}!{A1} to {Sheet}!{H1}. The cells it last wrote, {Sheet}!{A1}:{F25}, stay until you clear them in Excel; at its new place the next Update checks for existing data, as for a new range.` - `warning[APPLY_DSDATA_BROKEN]: '{Sheet}'!{A1}: =DS.DATA("{rowBlock}", …) does not compile against the new model: [{CODE}] {the compile's message} (it compiles against the workbook's model now)` - `warning[APPLY_DSDATA_NOT_CHECKED]: '{Sheet}'!{A1}: =DS.DATA("{rowBlock}", …) was not checked — an argument is not text.` Then what was removed, and the closing line (status lines, no code): - `Removed the workbook's saved values (one part): the next Update calculates every value.` - `Removed 2 names the new model does not use: {name}, ….` - `Wrote {new.xlsx}. Open it in Excel and press Update: the model is the new one, and its numbers are calculated only then.` - `apply: refused — {why}; nothing was written.`