Какую бесплатную библиотеку для работы с Excel на C++ для Windows вы посоветуете?
Мне нужна библиотека, которая позволяет:
- Чтение данных из ячеек Excel
- Запись данных в ячейки Excel
- Поддержку формул (желательно)
Предпочтительно, чтобы библиотека имела лицензию GPL.
Лучшей бесплатной библиотекой для работы с Excel на C++ для Windows я бы посоветовал OpenXLSX. Это библиотека с открытым исходным кодом под лицензией GPL, которая обеспечивает полное чтение, запись и создание файлов Excel (.xlsx), включая поддержку формул. OpenXLSX является кроссплатформенным решением с активной разработкой и хорошей документацией.
Содержание
- Что такое OpenXLSX
- Основные возможности библиотеки
- Установка и настройка
- Примеры использования
- Альтернативные варианты
- Ограничения и особенности
Что такое OpenXLSX
OpenXLSX — это библиотека C++ с открытым исходным кодом для чтения, записи, создания и модификации файлов Microsoft Excel (.xlsx). Как указано в документации проекта, эта библиотека была разработана для решения проблемы отсутствия зрелых open source библиотек для работы с Excel на C++.
Библиотека OpenXLSX обеспечивает поддержку нескольких важных функций, таких как создание, открытие и сохранение файлов электронных таблиц, чтение и запись данных.
Ключевые особенности:
- Полностью бесплатная и open source
- Лицензия GPL (General Public License)
- Кроссплатформенная поддержка (Windows, Linux, macOS)
- Работает с современным форматом .xlsx
- Не требует установки Microsoft Excel
Основные возможности библиотеки
Поддержка чтения и записи данных
OpenXLSX предоставляет полный доступ к ячейкам Excel:
#include <OpenXLSX.hpp>
using namespace OpenXLSX;
int main() {
// Открытие существующего файла Excel
XLDocument doc;
doc.open("example.xlsx");
auto wks = doc.workbook().worksheet("Sheet1");
// Чтение данных из ячеек
auto cellValue = wks.cell("A1").value();
std::cout << "Значение ячейки A1: " << cellValue << std::endl;
// Запись данных в ячейки
wks.cell("B1").value("Привет, мир!");
wks.cell("C1").value(42);
wks.cell("D1").value(3.14);
doc.save();
doc.close();
return 0;
}
Поддержка формул
Библиотека поддерживает работу с формулами Excel:
// Установка формулы в ячейку
wks.cell("E1").value("=SUM(A1:D1)");
// Получение значения формулы
auto formulaResult = wks.cell("E1").value();
std::cout << "Результат формулы: " << formulaResult << std::endl;
Дополнительные возможности
- Управление рабочими книгами и листами
- Чтение и запись стилей форматирования
- Работа с диапазонами ячеек
- Поддержка различных типов данных (строки, числа, даты, логические значения)
- Экспорт и импорт данных
Установка и настройка
Системные требования
- C++17 или выше
- CMake 3.15 или выше
- Современный компилятор (MSVC 2019+, GCC 7+, Clang 6+)
Процесс установки
- Клонирование репозитория с GitHub:
git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
- Сборка проекта с помощью CMake:
mkdir build
cd build
cmake ..
cmake --build .
- Интеграция в проект Visual Studio:
- Добавить директорию
includeв дополнительные включаемые каталоги - Ссылаться на собранные библиотеки в настройках линковки
Пример CMakeLists.txt для вашего проекта:
cmake_minimum_required(VERSION 3.15)
project(MyExcelApp)
set(CMAKE_CXX_STANDARD 17)
# Добавление OpenXLSX
add_subdirectory(third_party/OpenXLSX)
# Создание вашего приложения
add_executable(myapp main.cpp)
target_link_libraries(myapp OpenXLSX)
Примеры использования
Создание нового файла Excel
#include <OpenXLSX.hpp>
void createExcelFile() {
// Создание нового документа
XLDocument doc;
doc.create("new_file.xlsx");
// Получение рабочей книги и листа
auto wks = doc.workbook().worksheet("Sheet1");
// Запись заголовков
wks.cell("A1").value("Товар");
wks.cell("B1").value("Количество");
wks.cell("C1").value("Цена");
wks.cell("D1").value("Сумма");
// Запись данных
wks.cell("A2").value("Яблоки");
wks.cell("B2").value(10);
wks.cell("C2").value(50.0);
wks.cell("D2").value("=B2*C2");
wks.cell("A3").value("Апельсины");
wks.cell("B3").value(15);
wks.cell("C3").value(75.0);
wks.cell("D3").value("=B3*C3");
// Сохранение и закрытие
doc.save();
doc.close();
}
Чтение и обработка данных
void readExcelData() {
XLDocument doc;
doc.open("data.xlsx");
auto wks = doc.workbook().worksheet("Sheet1");
// Чтение количества строк
auto lastRow = wks.rowCount();
// Обработка данных
for (XLRow row : wks.rows()) {
auto productName = row.cell(1).value();
auto quantity = row.cell(2).value();
auto price = row.cell(3).value();
std::cout << "Товар: " << productName
<< ", Количество: " << quantity
<< ", Цена: " << price << std::endl;
}
doc.close();
}
Альтернативные варианты
LibXL
LibXL — еще одна популярная библиотека для работы с Excel:
-
Плюсы:
- Поддерживает форматы .xls и .xlsx
- Высокая производительность
- Простота использования
-
Минусы:
- Не является полностью бесплатной - есть ограничения в бесплатной версии (до 300 операций одновременно)
- Лицензия не GPL, а коммерческая
- Первая строка не может быть прочитана или записана в бесплатной версии
Aspose.Cells for C++
Aspose.Cells — мощная коммерческая библиотека:
-
Плюсы:
- Полная поддержка всех возможностей Excel
- Отличная документация
- Техническая поддержка
-
Минусы:
- Платная - нет бесплатной версии
- Лицензия не GPL
Ограничения и особенности
Преимущества OpenXLSX
- Полностью бесплатная под лицензией GPL
- Открытый исходный код - можно модифицировать и адаптировать
- Современный формат .xlsx поддержка
- Кроссплатформенность - работает на Windows, Linux, macOS
- Активная разработка - регулярные обновления
Текущие ограничения
- Поддержка только формата .xlsx (не .xls)
- Некоторые сложные функции Excel могут иметь ограниченную поддержку
- Документация может быть не такой полной, как у коммерческих аналогов
Советы по использованию
- Начинайте с простых операций чтения/записи
- Используйте примеры из репозитория GitHub
- Следите за обновлениями библиотеки
- При возникновении проблем обращайтесь к issue tracker на GitHub
Заключение
OpenXLSX является наилучшим выбором для бесплатной работы с Excel на C++ на Windows, особенно когда важна лицензия GPL. Библиотека обеспечивает:
- Полноценное чтение и запись данных ячеек Excel
- Поддержку формул для вычислений
- Бесплатное использование без ограничений на количество операций
- Совместимость с современными версиями Excel
- Активное сообщество и разработку
Для большинства задач автоматизации Excel на C++ OpenXLSX предоставляет достаточный функционал, при оставаясь полностью бесплатным и open source решением.
Источники
- Библиотека C++ с открытым исходным кодом для электронных таблиц — чтение и запись файлов Excel
- GitHub - OpenXLSX: A C++ library for reading, writing, creating and modifying Microsoft Excel® (.xlsx) files
- C++ library to read Excel Spreadsheets - Software Recommendations Stack Exchange
- C++ Excel Library to read/write xls/xlsx files - LibXL
- Библиотека для работы с форматом Excel
- Создание файлов Excel на C++ | Создание диаграмм, формул, таблиц в файлах Excel