Skip to content

Аналог Excel (без графического интерфейса). Реализует упрощенную логику работы отдельного листа электронных таблиц.

Notifications You must be signed in to change notification settings

NTG-TPL/Spreadsheet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

Spreadsheet - Электронная таблица

Это аналог Excel (без графического интерфейса). Реализует упрощенную логику работы отдельного листа электронных таблиц. Позволяет хранить данные (текст и формулы) в ячейках, вычислять значения ячеек. Формулы могут содержать числа и ссылки на другие ячейки в качестве операндов. Поддерживаются операции: сложение, вычитание, умножение, деление и унарный минус. Кроме того, поддерживается печать таблицы в поток вывода. При парсинге формул проверяются циклические зависимости. При вычислении значений используется кэш. Для синтаксического разбора формул используется библиотека ANTLR.

Функциональность

Ячейки

Ячейка таблицы определяется ее индексом, то есть строкой вида "A1", "C14" или "RD2". Более того, ячейка с индексом "A1" - это ячейка в левом верхнем углу таблицы. Количество строк и столбцов в таблице не превышает 16384. То есть предельным положением ячейки является (16383, 16383) с индексом XFD16384. Если позиция ячейки выходит за эти границы, то она недопустима по определению. Метод bool IsValid() структуры Position проверяет позицию на валидность.

Структура Positions в файле common.h. Он содержит поля row и col - номера строк и столбцов ячейки в представлении программы. Используется для доступа к ячейкам. Функции для преобразования индекса в строку Position::fromString() и из строки Position::toString().

Методы для работы с ячейками

  • void SetCell(Position pos, std::string text) устанавливает содержимое ячейки по индексу позиции.
  • const CellInterface* GetCell(Position pos) const и CellInterface* GetCell(Position pos) возвращают указатель на ячейку по позиции. Если ячейка пуста, возвращается значение nullptr.
  • void ClearCell(Position pos) очищает ячейку по индексу (размер минимальной печатной области может изменяться).

Печать

Печать происходит по минимальной печатной области с вершиной в ячейке A1, содержащей все непустые ячейки. Структура размеров определена в файле common.h. Он содержит количество строк и столбцов в минимальной области, доступной для печати. void PrintTexts(std::ostream& output) - печатает текст ячеек в поток вывода по минимальной печатной области. void PrintValues(std::ostream& output) - печатает значения ячеек в поток вывода по минимальной печатной области. Получить размеры минимальной печатной области можно с помощью метода Size GetPrintableSize() const.

Пример использования

auto sheet = CreateSheet();

sheet->SetCell("A1"_pos, "=A4");
sheet->SetCell("A4"_pos, "27");
sheet->SetCell("C5"_pos, "=B3");
sheet->SetCell("B3"_pos, "Ready");

auto a1 = sheet->GetCell({0, 0});
std::cout << "A1 value = " << a1->GetValue() << std::endl;  // A1 value = 27
std::cout << "A1 text = " << a1->GetText() << std::endl; // A1 text = =A4

sheet->PrintTexts(std::cout);
sheet->PrintValues(std::cout);
результат
A1 value = 27
A1 text = =A4
=A4		
		
	Ready	
27		
		=B3

Сборка и установка

Для сборки программы необходим C++, поддерживающий стандарт C++17 и выше, Cmake не ниже версии 3.8, ANTLR4. ANTLR написан на Java, поэтому для его работы вам понадобится комплект разработки JDK. Вы также можете использовать OpenJDK. Установите JDK в свою систему. Инструкцию по установке ANTLR можно найти на сайте antlr.org. Более подробные рекомендации представлены в руководстве Getting Started.

Сборка с помощью CMake

  1. Для компиляции этого кода понадобится библиотека ANTLR4 C++ Runtime. Скачайте архив antlr4-cpp-runtime*.zip из раздела Download на сайте antlr.org.
  2. Создайте папку build для сборки программы
  3. Повторите следующую структуру проекта:
Spreadsheet/
├── antlr4_runtime/
│   └── Содержимое архива antlr4-cpp-runtime*.zip.
├── build/
├── antlr-4.13.0-complete.jar
├── CMakeLists.txt
├── FindANTLR.cmake
├── Formula.g4
├── Остальные файлы проекта
└── ...
  1. Откройте консоль в папке build и введите в консоли : cmake ..,- с нужными парамеетрами
  2. Введите команду : make или make -j<кол-во ядер процессора> для ускорения процесса сборки
  3. В папке build появится исполняемый файл spreadsheet (spreadsheet.exe для Windows)

About

Аналог Excel (без графического интерфейса). Реализует упрощенную логику работы отдельного листа электронных таблиц.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published