Программирование

Бесплатная C++ библиотека для Excel на Windows: OpenXLSX, xlnt

Рекомендации по бесплатным C++ библиотекам для работы с Excel на Windows: чтение/запись ячеек, формулы. Сравнение OpenXLSX, xlnt, libxlsxwriter. Примеры кода, установка, лицензии BSD/MIT.

Какую бесплатную C++ библиотеку для работы с Excel на Windows вы посоветуете?

Мне нужна библиотека с открытым исходным кодом (желательно с лицензией GPL) для Windows, которая позволяет:

  • Чтение данных из ячеек Excel
  • Запись данных в ячейки Excel
  • Поддержку формул (если возможно)

Рекомендую начать с OpenXLSX или xlnt как бесплатных C++ библиотек для работы с Excel на Windows — обе открыты, поддерживают чтение и запись ячеек, а также запись формул (хотя ни одна из них не выполняет вычисление формул). Если нужна исключительно запись XLSX с быстрым и простым API — обратите внимание на libxlsxwriter. Чистой GPL-лицензии среди активно поддерживаемых C++ XLSX-проектов нет, поэтому выбирайте между функциональностью и моделью лицензирования (BSD/MIT/FreeBSD).


Содержание


Рекомендованные библиотеки C++ для работы с Excel на Windows

  • OpenXLSX — хорошая бесплатная C++ библиотека для .xlsx с лицензией BSD-3-Clause, поддерживает чтение и запись ячеек и хранение формул (запись/чтение как текст). Подходит для Windows (MSVC, MinGW) и не требует внешних зависимостей кроме включённых PugiXML/miniz. Подробнее: OpenXLSX.
  • xlnt — кроссплатформенная C++11+ библиотека с лицензией MIT, удобный API, поддерживает чтение/запись и запись формул (формулы сохраняются в файле, но библиотека сама их не вычисляет). Лёгкая интеграция через vcpkg. Подробнее: xlnt.
  • libxlsxwriter — C-библиотека (хорошо используется из C++) с лицензией FreeBSD, ориентирована на создание файлов XLSX (write-only), поддерживает запись формул и форматирование, но не умеет читать файлы. Отличный выбор, если нужно быстро генерировать отчёты. Подробнее: libxlsxwriter.

Коротко: если вам нужно и читать, и писать — выбирайте OpenXLSX или xlnt; если только создавать файлы с формулами — libxlsxwriter. Учтите: «поддержка формул» обычно означает запись/чтение строк формул, а не вычисление их значений.


Детальное сравнение C++ библиотек для Excel: чтение, запись, формулы

OpenXLSX: чтение/запись и формулы

  • Лицензия: BSD-3-Clause (разрешающая).
  • Windows: поддержка MSVC и MinGW; CMake ≥ 3.15.
  • Функции: чтение и запись ячеек, доступ к диапазонам через итераторы, чтение/запись формул через API (формула хранится как текст).
  • Формулы: можно записать формулу в ячейку (cell("B1").formula() = "=SUM(A1:C1)";) и прочитать её текст; библиотека обычно не выполняет вычисления формул — Excel пересчитает их при открытии файла.
  • Краткий пример (сниппет):
cpp
#include <OpenXLSX/OpenXLSX.hpp>
using namespace OpenXLSX;

int main() {
 XLDocument doc;
 doc.open("input.xlsx");
 auto ws = doc.workbook().worksheet("Sheet1");

 // Чтение
 auto s = ws.cell("A1").value().get<std::string>();

 // Запись
 ws.cell("B1").value() = 42;

 // Запись формулы (формула сохранится как текст)
 ws.cell("C1").formula() = "=SUM(B1:B10)";

 doc.save();
 doc.close();
 return 0;
}

Подробности и исходники: OpenXLSX.


xlnt: гибкость и кроссплатформенность

  • Лицензия: MIT (разрешающая).
  • Windows: поддерживается, удобно устанавливать через vcpkg.
  • Функции: полноценное чтение/запись, поддержка стилей, слияний, диаграмм (в определённой степени), запись формул.
  • Формулы: запись возможна (cell("C3").formula("=RAND()")), но библиотека не выполняет вычисление формул — она хранит их в файле для Excel.
  • Краткий пример:
cpp
#include <xlnt/xlnt.hpp>

int main() {
 xlnt::workbook wb;
 wb.load("input.xlsx");
 auto ws = wb.active_sheet();

 // Чтение
 int x = ws.cell("A1").value<int>();

 // Запись
 ws.cell("B1").value(3.14);

 // Запись формулы (Excel выполнит её при открытии)
 ws.cell("C1").formula("=SUM(A1:B1)");

 wb.save("out.xlsx");
 return 0;
}

Проект: xlnt.


libxlsxwriter: создание файлов и формулы (write-only)

  • Лицензия: FreeBSD.
  • Windows: поддерживается (MSVC 2015+), требует zlib.
  • Функции: генерация XLSX-файлов, форматирование, формулы, диаграммы; не умеет читать существующие файлы.
  • Формулы: можно записывать формулы текстом (worksheet_write_formula()), библиотека не вычисляет их.
  • Пример (C API, легко использовать из C++):
c
#include "xlsxwriter.h"

int main() {
 lxw_workbook *workbook = workbook_new("out.xlsx");
 lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);

 worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
 worksheet_write_number(worksheet, 0, 1, 123.45, NULL);
 worksheet_write_formula(worksheet, 1, 0, "=SUM(A1:B1)", NULL);

 workbook_close(workbook);
 return 0;
}

Проект: libxlsxwriter.


Как выбрать библиотеку (лицензия, функциональность, формулы)

Что для вас важнее: лицензия или функциональность? Небольшая подсказка:

  • Нужны чтение + запись + простой API: выбирайте OpenXLSX. Он лёгок и специально заточен под .xlsx.
  • Нужны расширенные возможности (стили, диаграммы, кроссплатформенность): xlnt даёт более широкий набор возможностей.
  • Нужна высокая производительность при генерации отчётов и запись формул — libxlsxwriter отличен, но он write-only.
  • Требуется именно GPL? К сожалению, среди активно поддерживаемых C++ библиотек для .xlsx нет популярных проектов под GPL. Если GPL — придётся либо:
  • использовать GPL-проект на другом языке и связывать через IPC/CLI/REST; либо
  • интегрировать с GPL/LGPL-приложением (например, LibreOffice) — но это добавит сложность и требования к окружению; либо
  • писать собственную библиотеку/адаптер и контролировать лицензию.

Нужна автоматическая оценка формул на стороне сервера (чтобы прямо в файле был результат)? Тогда варианты:

  • автоматизировать Excel через COM (Windows, требует установленный MS Excel) — можно открыть книгу, выполнить Calculate и сохранить;
  • или использовать headless LibreOffice/Calc для пересчёта и экспорта;
  • либо реализовать свой движок вычислений (сложно).

Выбор зависит от ограничений окружения и от того, допустима ли зависимость от установленного MS Office.


Быстрая установка и примеры кода

Установка на Windows — кратко:

  • OpenXLSX: клонируйте репозиторий и соберите через CMake (CMake ≥ 3.15). Пример:
bash
git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
mkdir build && cd build
cmake ..
cmake --build . --config Release
  • xlnt: самый простой путь — через vcpkg:
powershell
vcpkg install xlnt
# затем подключите vcpkg в CMake: -DCMAKE_TOOLCHAIN_FILE=[vcpkg]/scripts/buildsystems/vcpkg.cmake
  • libxlsxwriter: аналогично — клонирование и сборка через CMake; требуется zlib:
bash
git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter
mkdir build && cd build
cmake ..
cmake --build . --config Release

Короткие примеры см. в разделах сравнения выше. Компиляция: подключите include-пути и линковку к соответствующим библиотекам (для OpenXLSX и xlnt — через CMake; для libxlsxwriter — ссылаться на собранную библиотеку).


Источники


Заключение

Если вам нужна бесплатная C++ библиотека Excel на Windows с поддержкой чтения и записи ячеек и возможностью сохранять формулы — мой практический выбор: начать с OpenXLSX (простота и поддержка чтения/записи) или xlnt (больше возможностей, удобна через vcpkg). Для задач «только запись» и генерации отчётов рекомендую libxlsxwriter. Чистой GPL-альтернативы среди известных и активно поддерживаемых C++ библиотек для .xlsx нет, поэтому, если GPL критична, подготовьтесь к интеграции с внешними инструментами (LibreOffice/COM) или к архитектурным компромиссам. Если хотите — расскажите подробнее о вашем проекте (требования по формату, нужно ли вычислять формулы на сервере, разрешена ли зависимость от MS Office) — помогу выбрать и прописать конкретный пример сборки и кода.

Авторы
Проверено модерацией
Модерация
Бесплатная C++ библиотека для Excel на Windows: OpenXLSX, xlnt