diff --git a/docs/1c-spreadsheet-spec.md b/docs/1c-spreadsheet-spec.md index 5ec3f977..1a199688 100644 --- a/docs/1c-spreadsheet-spec.md +++ b/docs/1c-spreadsheet-spec.md @@ -80,7 +80,16 @@ ``` -Перечисляются только колонки с нестандартной шириной. Формат колонки определяет ширину через свойство `` в палитре форматов. +Перечисляются колонки, у которых есть собственный формат. Обычно это ширина (`` в +палитре форматов), но формат колонки несёт и оформление: шрифт (3 006 форматов на корпусе), +выравнивания, рамки, `hidden`. + +Два случая, которые легко упустить: + +- `0` — колонка перечислена, а формата у неё **нет** (ноль здесь не + индекс записи). Встречается у 4% макетов; +- индекс колонки бывает **больше или равен ``** — платформа описывает колонки за + пределами объявленной ширины сетки (25% макетов). ### Дополнительные наборы колонок @@ -123,8 +132,12 @@ ``` -- Строки с одинаковым содержимым объединяются через `` +- `` объединяет подряд идущие **пустые** строки. Одинаковые НЕпустые строки платформа + не схлопывает никогда: на корпусе ERP (10 924 макета) схлопнутых непустых нет ни одной, + несхлопнутых одинаковых непустых — 98 153; несхлопнутых одинаковых пустых — тоже ни одной - `` привязывает строку к дополнительному набору колонок. Без него — используется основной набор +- `` строки несёт не только высоту: в корпусе там `hidden` (17 423 вхождения), + `font` (9 216), `backColor`, выравнивания, `protection`, рамки ### Ячейка @@ -152,6 +165,14 @@ - Если `` не указан — колонка = предыдущая + 1 - Первая ячейка без `` идёт в колонку 0 +Платформа пишет `` **только при разрыве последовательности**: у подряд идущей ячейки его нет. +На корпусе ERP из 1 212 023 записанных номеров ни один не избыточен (счётчик начинается с −1, +поэтому у ячейки в колонке 0 номера тоже нет). + +`0` означает, что формата у ячейки **нет вовсе** — это не индекс записи. Так записана +ячейка без собственного оформления: 170 710 таких ячеек против 50 635, ссылающихся на формат +по умолчанию; `0` встречается в 71% макетов. + ### Типы заполнения ячеек Тип заполнения определяется свойством `fillType` в формате ячейки: @@ -327,12 +348,13 @@ ``` -| xsi:type | Значения | -|-----------------------------------------|-------------| -| `v8ui:SpreadsheetDocumentCellLineType` | Solid, None | -| `v8ui:SpreadsheetDocumentDrawingLineType` | Solid, None | +| xsi:type | Значения | +|-------------------------------------------|----------| +| `v8ui:SpreadsheetDocumentCellLineType` | `Solid`, `None`, `Dotted`, `ThinDashed`, `LargeDashed`, `ThickDashed`, `Double` | +| `v8ui:SpreadsheetDocumentDrawingLineType` | те же | -Атрибут `width` — толщина линии (1 = тонкая, 2 = толстая). +Атрибут `width` — толщина линии; в корпусе встречаются 0, 1, 2, 3. Атрибут `gap` на корпусе +всегда `false`, но пишется всегда. ## Шрифты @@ -376,15 +398,76 @@ Все свойства опциональны. Формат может содержать только `` (для колонки) или только `` (для строки). +### Порядок тегов + +Внутри `` теги идут в строгой последовательности — от неё зависит побайтовое совпадение +с выгрузкой. Порядок снят с корпуса ERP: 766 960 форматов, ни один его не нарушает. + +``` +print · drawingBorder · drawingHaveLeftBorder · drawingHaveTopBorder · +drawingHaveRightBorder · drawingHaveBottomBorder · font · leftBorder · topBorder · +rightBorder · bottomBorder · border · height · borderColor · width · +autoWidthCalculation · widthWeightFactor · horizontalAlignment · verticalAlignment · +textColor · backColor · patternColor · pattern · textPlacement · fillType · protection · +hidden · textOrientation · detailsUse · bySelectedColumns · markNegatives · +containsValue · valueType · format · controlType · hyperLink · autoMarkIncomplete · +indent · autoIndent · editFormat · columnSizeChange · mask · picIndex · +pictureSizeMode · picHorizontalAlignment · picVerticalAlignment · textPosition +``` + +Обрати внимание: `height` идёт РАНЬШЕ `width`, а `format` — после `valueType`. + +### Ширина и высота + +Единица — **1/8 символа**: `72` = стандартные 9 символов, `240` = 30, `80` = 10. + +### Рамка + +Четыре стороны и свёрнутый `` взаимоисключающи. Если все четыре стороны одинаковы, +платформа пишет один ``; иначе — по сторонам. На корпусе: 70 265 свёрнутых форматов +против 36 783 записанных по сторонам, и среди вторых нет ни одного с четырьмя совпадающими +значениями; смешения `border` с посторонними тегами нет ни разу. + +### Цвет + +Значение цвета (`backColor`, `textColor`, `borderColor`, `patternColor`) — строка с **префиксом +пространства имён**, а не свободный текст: + +| Запись в XML | Смысл | +|---|---| +| `#RRGGBB` | RGB-hex | +| `style:ИмяСтиля` | элемент стиля; префикс `style` объявлен в корне документа | +| `d3p1:Имя` + `xmlns:d3p1=".../ui/colors/web"` на самом узле | цвет web-палитры | +| `d3p1:Имя` + `xmlns:d3p1=".../ui/colors/windows"` на самом узле | системный цвет Windows | + +Корень `` объявляет только `style`, поэтому для web- и windows-палитр платформа +дописывает объявление прямо на узел. Префикс всегда `d3p1` (1264 вхождения на корпусе без +отклонений). В Form.xml те же цвета выглядят как `web:Имя` и `win:Имя` — там эти префиксы +объявлены в корне. + ### Связь формата с контекстом -| Контекст | Ссылка | Значимые свойства формата | -|------------------|--------------------|--------------------------| -| Колонка | `` | `width` | -| Строка | `` | `height` | -| Ячейка | `` | Все остальные | -| Рисунок | `` | `drawingBorder` | -| По умолчанию | `` | `width` | +Один формат обслуживает всех: колонка, строка и ячейка ссылаются в одну палитру, и набор +свойств у них общий (`hidden` встречается у ячеек 30 175 раз, у строк 17 423, у колонок 57; +`protection` — 84 442 / 1 492 / 1 017). + +| Контекст | Ссылка | Свойства, специфичные для контекста | +|------------------|------------------------|-------------------------------------| +| Колонка | `` | `width` | +| Строка | `` | `height`, `hidden` | +| Ячейка | `` | `fillType`, `containsValue` | +| Рисунок | `` | `drawingBorder`, `drawing*` | +| По умолчанию | `` | `width` | + +Оформление, применённое к строке целиком, платформа записывает И в формат строки, И в формат +каждой ячейки (`backColor`: 13 899 ячеек повторяют против 96). Исключение — `hidden`: оно +остаётся только у строки (24 026 против 62 856). + +**Ловушка: `width` в формате ЯЧЕЙКИ не описывает ячейку.** Ссылка ячейки на запись палитры не +обновляется при изменении ширины колонки, поэтому там остаётся ширина от прежнего состояния +документа. Проверено на контролируемом стенде: в макете, где ширины колонок поменяли на +обратные, ячейки продолжают ссылаться на записи со старыми ширинами. Из итогового XML это +значение не выводится — воспроизводить его не нужно. ## Ресурсы картинок