Skip to content

Дипломный проект "Электронная таблица". Аналог существующих решений: лист таблицы Microsoft Excel или Google Sheets.

Notifications You must be signed in to change notification settings

YaDanilamaster/Spreadsheet

Repository files navigation

Дипломный проект "Электронная таблица"

«Электронная таблица» это аналог существующих решений: лист таблицы Microsoft Excel или Google Sheets. В ячейках таблицы могут быть текст или формулы. Формулы, как и в существующих решениях, могут содержать индексы ячеек.

  • Ячейки могут содержать текст, числовые значения, арифметические формулы, ссылки на другие ячейки.
  • Вывод печатной области (выводится только использованная часть таблицы).
  • Проверка синтаксической и математической корректности формул, проверка ссылок и промежуточных значений.
  • Защита от циклических зависимостей между ячейками.
  • Поддержка кеша ячеек.

Обработка и выполнение формул реализованы с помощью ANTLR4

ANTLR (ANother Tool for Language Recognition) — мощный генератор парсеров для чтения, обработки, выполнения или перевода структурированного текста или двоичных файлов. Он широко используется для создания языков, инструментов и фреймворков. Из грамматики ANTLR генерирует синтаксический анализатор, который может строить и проходить деревья синтаксического анализа.

Сборка проекта

Для корректной генерации кода с помощью ANTLR4 требуется Java не ниже 11, antlr4-complete.jar и его исходники. Исходники вместе с CmakeLists.txt расположены в паке antlr4_runtime, antlr4-complete.jar вложен в корневую директорию проекта. Останется только указать системе путь к antlr4-complete.jar.

Перед началом сборки необходиму указать системе путь к antlr4-complete.jar. Для этого нужно выполнить одну из команд:

  • Windows SET CLASSPATH=.;Полный путь к проекту\antlr4-complete.jar;%CLASSPATH%
  • Linux $ export CLASSPATH=".:Полный путь к проекту\antlr4-complete.jar:$CLASSPATH"
  • OS X $ export CLASSPATH=".:Полный путь к проекту\antlr4-complete.jar:$CLASSPATH"

Теперь Cmake сможет собрать проект.

Пример работы с листом:

// Для удобства работы с координатами определим оператор  _pos
inline Position operator"" _pos(const char* str, std::size_t) {
    return Position::FromString(str);
}

void Example() {
    auto sheet = CreateSheet();
    sheet->SetCell("A1"_pos, "300");
    sheet->SetCell("A2"_pos, "50");
    sheet->SetCell("A3"_pos, "=A1/A2");
    sheet->SetCell("B1"_pos, "=A3*50");
    sheet->SetCell("B3"_pos, "(A3+B1)/10=");
    sheet->SetCell("C3"_pos, "=(A3+B1)/10");
    sheet->SetCell("D1"_pos, "Delete mee");
    sheet->ClearCell("D1"_pos);
    sheet->PrintValues(std::cout);
}

About

Дипломный проект "Электронная таблица". Аналог существующих решений: лист таблицы Microsoft Excel или Google Sheets.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages