Бесплатная 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
- Детальное сравнение C++ библиотек для Excel: чтение, запись, формулы
- Как выбрать библиотеку (лицензия, функциональность, формулы)
- Быстрая установка и примеры кода
- Источники
- Заключение
Рекомендованные библиотеки 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 пересчитает их при открытии файла. - Краткий пример (сниппет):
#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. - Краткий пример:
#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++):
#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). Пример:
git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
mkdir build && cd build
cmake ..
cmake --build . --config Release
- xlnt: самый простой путь — через vcpkg:
vcpkg install xlnt
# затем подключите vcpkg в CMake: -DCMAKE_TOOLCHAIN_FILE=[vcpkg]/scripts/buildsystems/vcpkg.cmake
- libxlsxwriter: аналогично — клонирование и сборка через CMake; требуется zlib:
git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter
mkdir build && cd build
cmake ..
cmake --build . --config Release
Короткие примеры см. в разделах сравнения выше. Компиляция: подключите include-пути и линковку к соответствующим библиотекам (для OpenXLSX и xlnt — через CMake; для libxlsxwriter — ссылаться на собранную библиотеку).
Источники
- https://github.com/troldal/OpenXLSX
- https://github.com/tfussell/xlnt
- https://github.com/jmcnamara/libxlsxwriter
Заключение
Если вам нужна бесплатная C++ библиотека Excel на Windows с поддержкой чтения и записи ячеек и возможностью сохранять формулы — мой практический выбор: начать с OpenXLSX (простота и поддержка чтения/записи) или xlnt (больше возможностей, удобна через vcpkg). Для задач «только запись» и генерации отчётов рекомендую libxlsxwriter. Чистой GPL-альтернативы среди известных и активно поддерживаемых C++ библиотек для .xlsx нет, поэтому, если GPL критична, подготовьтесь к интеграции с внешними инструментами (LibreOffice/COM) или к архитектурным компромиссам. Если хотите — расскажите подробнее о вашем проекте (требования по формату, нужно ли вычислять формулы на сервере, разрешена ли зависимость от MS Office) — помогу выбрать и прописать конкретный пример сборки и кода.