{"id":37059083,"url":"https://github.com/bookfx/bookfx","last_synced_at":"2026-01-14T06:39:51.453Z","repository":{"id":44173228,"uuid":"218307273","full_name":"bookfx/bookfx","owner":"bookfx","description":"Composing Excel spreadsheets based on a tree of nested components like the HTML DOM.","archived":false,"fork":false,"pushed_at":"2022-02-11T08:24:57.000Z","size":588,"stargazers_count":109,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-31T20:02:08.134Z","etag":null,"topics":["excel","netstandard","ooxml","openxml","xlsx"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bookfx.png","metadata":{"files":{"readme":"README-ru.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-29T14:30:35.000Z","updated_at":"2025-03-31T16:12:38.000Z","dependencies_parsed_at":"2022-09-03T15:22:13.197Z","dependency_job_id":null,"html_url":"https://github.com/bookfx/bookfx","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/bookfx/bookfx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookfx%2Fbookfx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookfx%2Fbookfx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookfx%2Fbookfx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookfx%2Fbookfx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bookfx","download_url":"https://codeload.github.com/bookfx/bookfx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bookfx%2Fbookfx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28412211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["excel","netstandard","ooxml","openxml","xlsx"],"created_at":"2026-01-14T06:39:50.746Z","updated_at":"2026-01-14T06:39:51.443Z","avatar_url":"https://github.com/bookfx.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BookFx\n\n[![nuget-img][]][nuget-link]\n[![build-img][]][build-link]\n[![tests-img][]][tests-link]\n[![quality-img][]][quality-link]\n\n[en][] | **ru**\n\nBookFx предоставляет экстремально эффективный способ создания книг Excel любой сложности.\n\n```c#\nMake.Book().ToBytes()\n```\n\nИ у нас уже есть xlsx с одним пустым листом!\n\n![book-empty][]\n\nБолее приветливый вариант:\n\n```c#\nMake.Value(\"Hi, World!\").ToSheet().ToBook().ToBytes()\n```\n\n![box-a1][]\n\nКомпозиция вместо высчитывания адресов,\nкомпонентный подход для устранения сложности,\nфункциональный стиль вместо VBA-подобной императивщины,\nпрототипирование компонентов со слотами из частей заготовленных xlsx-файлов,\nформулы, шрифты, цвета, выравнивания, форматы.\nОбо всем этом ниже.\n\nBookFx требует [.NET Standard 2.0][.net standard 2.0] и зависит от [EPPlus][epplus], который используется в качестве рендера в формат XLSX Office Open XML.\n\n## Содержание\n\n- [Установка](#установка)\n- [Начало работы](#начало-работы)\n- [Примеры использования](#примеры-использования)\n- [Концепции](#концепции)\n    - [Описание модели](#описание-модели)\n    - [Система размещения](#система-размещения)\n    - [Охват и объединение](#охват-и-объединение)\n    - [Значения и формулы](#значения-и-формулы)\n    - [Прототипирование](#прототипирование)\n- [Справочник API](#справочник-api)\n- [Лицензия](#лицензия)\n\n## Установка\n\n```shell\nPM\u003e Install-Package BookFx\n```\n\n## Начало работы\n\n### Создание\n\nТочка входа BookFx это класс `Make`.\nОн предоставляет методы для создания книг, листов, box'ов, стилей и границ.\nТочка выхода это `ToBytes()`.\nОсновные свойства классов BookFx могут быть заданы с использованием перегрузок методов `Make`:\n\n```c#\nMake.Book(Make.Sheet(\"First\"), Make.Sheet(\"Second\")).ToBytes()\n```\n\nДругой способ это chaining:\n\n```c#\nMake\n    .Book()\n    .Add(Make.Sheet().Name(\"First\"))\n    .Add(Make.Sheet().Name(\"Second\"))\n    .ToBytes()\n```\n\nРезультат обоих примеров один и тот же.\n\n![sheet-name][]\n\n### Боксы\n\n`Box` это строительный блок листа.\nОн может быть составным и всегда описывает диапазон — ячейку, строку, колонку или прямоугольник из ячеек.\n\nВ таблице перечислены все типы box'ов.\n\n| Тип | Создание | Назначение |\n| -- | -- | -- |\n| `ValueBox` | `Make.Value()` | Значения, формулы и пустые диапазоны. |\n| `RowBox` | `Make.Row()` | Размещение box'ов слева направо. |\n| `ColBox` | `Make.Col()` | Размещение box'ов сверху вниз. |\n| `StackBox` | `Make.Stack()` | Размещение box'ов слоями. |\n| `ProtoBox` | `Make.Proto()` | Составление из шаблонов. |\n\nЧто если поместить в `RowBox` два `ValueBox`'а?\n\n```c#\nMake.Row(Make.Value(\"Box A1\"), Make.Value(\"Box B1\")).ToSheet().ToBook().ToBytes()\n```\n\n![box-a1-b1][]\n\nЛогично. Два значения расположились в строку!\n\n### Преобразования\n\nВ `ValueBox` реализованы [неявные преобразования][implicit convertions] из всех необходимых типов значений.\nЧто это значит?\nЭто значит, что не обязательно каждый раз повторять `Make.Value`,\nпотому что `ValueBox` будет создан автоматически.\n\n```c#\nMake.Row(\"Box A1\", \"Box B1\").ToSheet().ToBook().ToBytes()\n```\n\n![box-a1-b1][]\n\nРезультат тот же самый!\n\n### Композиция\n\nОпишем вот такую шапку таблицы:\n\n![box-header][]\n\nВ терминах BookFx она может быть представлена как композиция элементов, вот так:\n\n![box-header-model][]\n\nЛегко увидеть общий паттерн.\n\n![box-plan-fact-model][]\n\nМы можем извлечь этот паттерн в функцию:\n\n```c#\nBox PlanFact(string title) =\u003e Make.Col(title, Make.Row(\"Plan\", \"Fact\"));\n```\n\nПо сути это простой компонент. Протестируем его:\n\n```c#\nPlanFact(\"Beginning of year\").ToSheet().ToBook().ToBytes()\n```\n\n![box-plan-fact][]\n\nТеперь используем `PlanFact` как компонент и добавим стиль:\n\n```c#\nBox Head() =\u003e Make\n    .Row()\n    .Add(\"Code\", \"Name\", PlanFact(\"Beginning of year\"), PlanFact(\"End of year\"))\n    .Style(Make.Style().Center().Middle().Bold().DefaultBorder());\n```\n\nО, так это же еще один компонент!\nЧто же это получается?\nКомпонент – это функция. Функция – это компонент...\nПохоже в наших руках безграничные возможности!\n\nТеперь все просто:\n\n```c#\nHead().AutoSpan().ToSheet().ToBook().ToBytes()\n```\n\n![box-header][]\n\nГотово.\n\nПро `AutoSpan` можно почитать в разделе [Охват и объединение](#охват-и-объединение).\nПолная версия в примерах использования ниже.\n\n## Примеры использования\n\nПроект `BookFx.Usage` содержит несколько примеров использования. Результаты его выполнения сохраняются в папку `src\\BookFx.Usage\\bin\\Debug\\netcoreapp2.1\\Results\\`.\n\n### [S1Table.cs][s1table.cs]\n\nЭто полная версия примера из [Начало работы](#начало-работы). Она создает таблицу с итогами.\n\n### [S2Style.cs][s2style.cs]\n\nЭтот пример демонстрирует некоторые возможности стилей BookFx.\n\n### [S3Calendar.cs][s3calendar.cs]\n\nОго! Календарь!\n\n[![s-3-calendar][]][s3calendar.cs]\n\n### [S5ProtoSheet.cs][s5protosheet.cs]\n\nЭто демонстрация добавления в книгу листов из существующих книг. См. также [Прототипирование](#прототипирование).\n\n### [S6ProtoBox.cs][s6protobox.cs]\n\nЭто пример [прототипирования](#прототипирование).\n\n### [S7BalanceSheet.cs][s7balancesheet.cs]\n\nЭто демонстрация создания балансового отчета с шапкой и переменным количеством колонок и строк данных.\n\n## Концепции\n\n### Описание модели\n\nМодель книги BookFx чем-то похожа на HTML [DOM][dom].\nЭто дерево узлов, которое рендерится в xlsx-файл.\n\nТакой подход открывает множество возможностей:\n\n- узлы могут быть реализованы как повторно используемые компоненты;\n- размещение узлов определяется их композицией;\n- к иерархии узлов удобно применять стили;\n- для unit-тестирования не требуется рендеринг книги.\n\nМодель BookFx неизменяемая ([immutable][immutable object]),\nи у методов библиотеки нет побочных эффектов ([side effects][side effect]),\nпоэтому BookFx позволяет писать чистые функции ([pure functions][pure function]).\n\nТаким образом, BookFx:\n\n- помогает лучше структурировать описание книги;\n- берет на себя вычисления размеров и адресов диапазонов;\n- избавляет от необходимости использовать императивный API, пришедший из мира VBA-макросов;\n- раскрывает возможности функционального программирования.\n\n### Система размещения\n\nКаждый лист книги может содержать один корневой box. Он размещается в верхнем левом углу.\n\nСоставные box'ы содержат внутри себя другие box'ы и растягиваются чтобы вместить их:\n\n- внутри `RowBox` box'ы располагаются в строку слева направо;\n- внутри `ColBox` box'ы располагаются в колонку сверху вниз;\n- внутри `StackBox` box'ы располагаются в стопку один над другим.\n\n`ValueBox` не может содержать другие box'ы, но может располагаться на нескольких ячейках.\nПодробнее об этом в разделе [Охват и объединение](#охват-и-объединение).\n\nРазмер `ProtoBox` всегда равен размеру прототипа, а внутренние box'ы `ProtoBox`'а размещаются с использованием механизма слотов. Подробнее в разделе [Прототипирование](#прототипирование).\n\n### Охват и объединение\n\n`ValueBox`, как и любой другой тип box'а, может располагаться на нескольких ячейках.\nДля определения количества охватываемых `ValueBox` ячеек используются методы `SpanRows`, `SpanCols` и их комбинация `Span`.\nОхват ячеек внутри `ValueBox` похож на работу атрибутов `rowspan` и `colspan` HTML-таблиц, однако в BookFx ячейки внутри `ValueBox` не всегда должны быть объединены.\n\nДля объединения ячеек используется метод `Merge`, но BookFx объединяет диапазоны `ValueBox` автоматически, если в box'е есть значение или формула. В некоторых случаях может потребоваться не объединять ячейки автоматически. Для этого используется `Merge(false)`.\n\nКроме автоматического объединения BookFx поддерживает автоматический охват, который включается методами `AutoSpanRows`, `AutoSpanCols` и их комбинацией `AutoSpan`. В этом режиме box и все включенные в него box'ы растягиваются до размеров своих контейнеров за счет последних растягиваемых `ValueBox`'ов. `ValueBox` считается растягиваемым, если для него не задан `Span` и для него не выключен `AutoSpan`. Мы уже использовали `AutoSpan` в разделе [Начало работы](#начало-работы).\n\n### Значения и формулы\n\nИ для значений, и для формул предназначен `ValueBox`,\nкоторый может быть создан либо с помощью `Make.Value`, либо с помощью неявного преобразования из всех необходимых типов значений: `string`, `int`, `decimal`, `DateTime` и др.\n\nФормулы должны начинаться с `=`. Для экранирования используется символ `'`. Поддерживается только стиль ссылок `R1C1`.\n\n```c#\nMake.Value(\"=SUM(RC[1]:RC[3])\")\n```\n\n### Прототипирование\n\nBookFx поддерживает использование фрагментов других книг в качестве прототипов:\n\n```c#\nMake\n    .Proto(protoBook, \"Prototype1\")\n    .Add(\"Slot1\", \"Value1\")\n    .Add(\"Slot2\", Make.Row(\"Value2\", \"Value3\"));\n```\n\nЗдесь\n\n- `protoBook` – `byte[]` содержимого xlsx-файла;\n- `\"Prototype1\"` – имя диапазона в `protoBook`;\n- `\"Slot1\"` и `\"Slot2\"` – имена диапазонов внутри `Prototype1`, в которых могут размещаться другие box'ы.\n\nСм. пример [S6ProtoBox.cs][s6protobox.cs].\n\nТакже BookFx поддерживает добавление целых листов из других книг:\n\n```c#\nMake.Sheet(\"New Sheet Name\", protoBook, \"Prototype Sheet Name\");\n```\n\nИз xlsx-файла `protoBook` будет скопирован лист `\"Prototype Sheet Name\"` и переименован в `\"New Sheet Name\"`. См. также другие перегрузки `Make.Sheet`.\n\nСм. также пример [S5ProtoSheet.cs][s5protosheet.cs].\n\n## Справочник API\n\n- `Make` - фабрика элементов модели\n    - `Make.Book` - создать `Book`\n    - `Make.Sheet` - создать `Sheet`\n    - `Make.Row` - создать `RowBox`\n    - `Make.Col` - создать `ColBox`\n    - `Make.Stack` - создать `StackBox`\n    - `Make.Value` - создать `ValueBox`\n    - `Make.Proto` - создать `ProtoBox`\n    - `Make.Style` - создать `BoxStyle`\n    - `Make.Border` - создать `BoxBorder`\n- `Book` - книга Excel\n    - `Book.Add` - добавить лист(ы)\n    - `Book.ToBytes` - выполнить рендеринг в xlsx\n- `Sheet` - лист Excel\n    - `Sheet.Name` - задать имя листа\n    - `Sheet.TabColor` - задать цвет вкладки\n    - `Sheet.SetPageView` - задать режим отображения\n    - `Sheet.Portrait` - задать книжную ориентацию страницы\n    - `Sheet.Landscape` - задать альбомную ориентацию страницы\n    - `Sheet.Margin` - задать поля страницы\n    - `Sheet.Fit` - вписать содержимое по высоте и ширине\n    - `Sheet.FitToHeight` - вписать содержимое по высоте\n    - `Sheet.FitToWidth` - вписать содержимое по ширине\n    - `Sheet.Scale` - задать масштаб\n    - `Sheet.ToBook` - создать `Book` с одним листом\n- `Box` - box любого вида\n    - `Box.NameGlobally` - присвоить диапазону имя области книги\n    - `Box.NameLocally` - присвоить диапазону имя области листа\n    - `Box.AutoSpan` - включить режим `AutoSpan` для строк и колонок\n    - `Box.AutoSpanRows` - включить режим `AutoSpan` для строк\n    - `Box.AutoSpanCols` - включить режим `AutoSpan` для колонок\n    - `Box.Style` - задать стиль\n    - `Box.SizeRows` - задать высоту строк\n    - `Box.SizeCols` - задать ширину колонок\n    - `Box.SetPrintArea` - задать область печати по box'у\n    - `Box.HideRows` - скрыть строки\n    - `Box.HideCols` - скрыть колонки\n    - `Box.Freeze` - закрепить область box'а\n    - `Box.FreezeRows` - закрепить строки box'а\n    - `Box.FreezeCols` - закрепить колонки box'а\n    - `Box.AutoFilter` - добавить автофильтр в нижней строке box'а\n    - `Box.ToSheet` - создать `Sheet` с корневым box'ом\n- `RowBox` - строка box'ов\n    - `RowBox.Add` - добавить box(ы) в строку\n- `ColBox` - колонка box'ов\n    - `ColBox.Add` - добавить box(ы) в колонку\n- `StackBox` - стопка box'ов\n    - `StackBox.Add` - добавить box(ы) в стопку\n- `ValueBox` - box со значением, формулой, или пустой box\n    - `ValueBox.Span` - охватить строки и колонки\n    - `ValueBox.SpanRows` - охватить строки\n    - `ValueBox.SpanCols` - охватить колонки\n    - `ValueBox.Merge` - объединить ячейки\n- `ProtoBox` - прототип\n    - `ProtoBox.Add` - добавить box в слот\n- `BoxStyle` - стиль\n    - `BoxStyle.Borders` - задать границы\n    - `BoxStyle.DefaultBorder` - задать обычные границы\n    - `BoxStyle.Font` - задать шрифт, его размер и цвет\n    - `BoxStyle.Back` - задать цвет фона\n    - `BoxStyle.Color` - задать цвет шрифта и/или цвет фона\n    - `BoxStyle.Bold` - выделить жирным\n    - `BoxStyle.Italic` - выделить курсивом\n    - `BoxStyle.Underline` - подчеркнуть\n    - `BoxStyle.Strike` - зачеркнуть\n    - `BoxStyle.Wrap` - задать перенос текста\n    - `BoxStyle.Shrink` - задать автоподбор ширины текста\n    - `BoxStyle.Align` - задать выравнивание\n    - `BoxStyle.Left` - выровнять по левому краю\n    - `BoxStyle.Center` - выровнять горизонтально по центру\n    - `BoxStyle.CenterContinuous` - выровнять горизонтально по центру смежных ячеек\n    - `BoxStyle.Right` - выровнять по правому краю\n    - `BoxStyle.Top` - выровнять по верхнему краю\n    - `BoxStyle.Middle` - выровнять вертикально по середине\n    - `BoxStyle.Bottom` - выровнять по нижнему краю\n    - `BoxStyle.RotateCounterclockwise` - повернуть текст против часовой стрелки\n    - `BoxStyle.RotateClockwise` - повернуть текст по часовой стрелке\n    - `BoxStyle.Indent` - задать отступ\n    - `BoxStyle.Format` - задать произвольный формат\n    - `BoxStyle.DefaultFormat` - задать формат `General` (Общий)\n    - `BoxStyle.Text` - задать формат `@` (Текстовый)\n    - `BoxStyle.Integer` - задать формат `#,##0` (Целое число)\n    - `BoxStyle.Money` - задать формат `#,##0.00` (Числовой с разделителем триад)\n    - `BoxStyle.Percent` - задать формат `0%` (Процентный, целое)\n    - `BoxStyle.DateShort` - задать формат `dd.mm.yyyy` (Краткий формат даты)\n- `BoxBorder` - граница\n    - `BoxBorder.Restrict` - ограничить часть box'а, к которой применяется граница\n    - `BoxBorder.Style` - задать стиль границы\n    - `BoxBorder.Color` - задать цвет границы\n- `EnumerableExt` - расширения IEnumerable для типов BookFx\n    - `IEnumerable\u003cBox\u003e.ToBook` - создать `Book` из листов\n    - `IEnumerable\u003cBox\u003e.ToRow` - создать `RowBox` из других box'ов\n    - `IEnumerable\u003cBox\u003e.ToCol` - создать `ColBox` из других box'ов\n    - `IEnumerable\u003cBox\u003e.ToStack` - создать `StackBox` из других box'ов\n    - `IEnumerable\u003cBoxStyle\u003e.Mix` - смешать стили и создать новый\n\n## Лицензия\n\nЭтот проект лицензируется под [LGPL-3.0-or-later](https://spdx.org/licenses/LGPL-3.0-or-later.html).\n\n### Уведомление об авторском праве\n\n``` txt\nBookFx. Composing Excel spreadsheets based on a tree of nested components like the HTML DOM.\nCopyright (c) 2019–2022 Zhenya Gusev\n```\n\n### Уведомление о лицензии\n\n``` txt\nЭта библиотека является свободным программным обеспечением:\nВы можете распространять и/или изменять ее,\nсоблюдая условия Меньшей генеральной публичной лицензии GNU,\nопубликованной Фондом свободного программного обеспечения;\nлибо редакции 3 Лицензии, либо любой редакции, выпущенной позже.\n\nЭта библиотека распространяется в расчете на то, что она окажется полезной,\nно БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая подразумеваемую гарантию КАЧЕСТВА либо\nПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Меньшей генеральной\nпубличной лицензией GNU для получения более подробной информации.\n\nВы должны были получить копию Меньшей генеральной публичной лицензии GNU\nвместе с этой библиотекой. Если Вы ее не получили, то перейдите по адресу:\n\u003chttp://www.gnu.org/licenses/\u003e.\n```\n\n\u003c!-- links --\u003e\n\n[nuget-img]: https://img.shields.io/nuget/v/BookFx?color=informational\n[nuget-link]: https://www.nuget.org/packages/BookFx\n[build-img]: https://img.shields.io/appveyor/ci/bookfx/bookfx/master\n[build-link]: https://ci.appveyor.com/project/bookfx/bookfx\n[tests-img]: https://img.shields.io/appveyor/tests/bookfx/bookfx/master\n[tests-link]: https://ci.appveyor.com/project/bookfx/bookfx\n[quality-img]: https://img.shields.io/codacy/grade/bccabc29ebf943ba89ac4a1d03b5e70a/master\n[quality-link]: https://app.codacy.com/gh/bookfx/bookfx/dashboard\n[en]: README.md\n[dom]: https://en.wikipedia.org/wiki/Document_Object_Model\n[immutable object]: https://en.wikipedia.org/wiki/Immutable_object\n[side effect]: https://en.wikipedia.org/wiki/Side_effect_(computer_science)\n[pure function]: https://en.wikipedia.org/wiki/Functional_programming#Pure_functions\n[.net standard 2.0]: https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.0.md\n[epplus]: https://github.com/JanKallman/EPPlus\n[implicit convertions]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/conversions#implicit-conversions\n[book-empty]: docs/img/book-empty.svg \"Пустая книга\"\n[sheet-name]: docs/img/sheet-name.svg \"Именованные листы\"\n[box-a1]: docs/img/box-a1.svg \"Box A1\"\n[box-a1-b1]: docs/img/box-a1-b1.svg \"Box A1, Box B1\"\n[box-header]: docs/img/box-header.svg \"Box шапки\"\n[box-header-model]: docs/img/box-header-model.svg \"Модель box'а шапки\"\n[box-plan-fact]: docs/img/box-plan-fact.svg \"PlanFact box\"\n[box-plan-fact-model]: docs/img/box-plan-fact-model.svg \"Модель PlanFact box'а\"\n[s1table.cs]: src/BookFx.Usage/S1Table.cs\n[s2style.cs]: src/BookFx.Usage/S2Style.cs\n[s3calendar.cs]: src/BookFx.Usage/S3Calendar.cs\n[s5protosheet.cs]: src/BookFx.Usage/S5ProtoSheet.cs\n[s6protobox.cs]: src/BookFx.Usage/S6ProtoBox.cs\n[s7balancesheet.cs]: src/BookFx.Usage/S7BalanceSheet.cs\n[s-3-calendar]: docs/img/s-3-calendar-ru.png \"Результат S3Calendar.cs\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookfx%2Fbookfx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbookfx%2Fbookfx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbookfx%2Fbookfx/lists"}