feat(mxl-compile,mxl-decompile): формат самой строки

У строки есть собственный формат: платформа хранит в нём скрытие (17 423 вхождения
в корпусе), шрифт (9 216), фон, выравнивания, защиту. Мы писали туда только высоту,
всё остальное теряли.

Разбор на контролируемом стенде показал, что это два разных случая, а не один.
Оформление, применённое к строке целиком, платформа пишет И строке, И каждой
ячейке (backColor: 13 899 ячеек повторяют против 96). Скрытие — только строке
(24 026 против 62 856). Поэтому одного правила «rowStyle красит ячейки» мало.

Теперь rowStyle — стиль строки: по умолчанию ложится и на строку, и на ячейки,
как это делает платформа. Объектная форма { style, apply } задаёт исключения:
"row" — только строке, "cells" — только ячейкам. Модификатор нужен раундтрипу,
в описании DSL его нет.

Скрытие и высота — собственные свойства строки, ключами рядом: у ячейки таких
свойств не бывает, и в её оформление они не попадают.

На пилоте категория row[].formatIndex упала с 1964 до 201 потерянного факта.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-11 18:36:41 +03:00
co-authored by Claude Opus 5
parent ccbd488d63
commit ba25aa4a00
25 changed files with 611 additions and 167 deletions
@@ -51,9 +51,10 @@
<rowsItem>
<index>0</index>
<row>
<formatIndex>5</formatIndex>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -64,7 +65,7 @@
</c>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -75,7 +76,7 @@
</c>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -86,7 +87,7 @@
</c>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -97,7 +98,7 @@
</c>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -108,7 +109,7 @@
</c>
<c>
<c>
<f>5</f>
<f>6</f>
<tl>
<v8:item>
<v8:lang>ru</v8:lang>
@@ -149,6 +150,9 @@
<format>
<width>30</width>
</format>
<format>
<border>0</border>
</format>
<format>
<font>0</font>
<border>0</border>