Работа с Excel в C++: библиотеки и инструменты
Работа с таблицами Excel (формат .xlsx) — одна из частых задач в прикладном программировании. На C++ нет встроенной поддержки этого формата, но существует несколько качественных библиотек, которые позволяют читать, создавать и редактировать файлы Excel. В этой статье мы рассмотрим четыре основных подхода: libxlsxwriter, xlsxio, OpenXLSX и работу через COM-интерфейс на Windows.
1. libxlsxwriter — создание XLSX «на лету»
libxlsxwriter — это библиотека на C, с обёртками для C++. Она позволяет создавать полноценные XLSX-файлы с поддержкой форматирования, формул, диаграмм и объединения ячеек. Главное преимущество — скорость и минимальное потребление памяти.
Установка
Скачайте исходники с GitHub и соберите через CMake:
git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install
Пример: создание таблицы с формулой
#include <xlsxwriter.h>
int main() {
lxw_workbook *workbook = workbook_new("report.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "Продажи");
// Заголовки
worksheet_write_string(worksheet, 0, 0, "Товар", NULL);
worksheet_write_string(worksheet, 0, 1, "Количество", NULL);
worksheet_write_string(worksheet, 0, 2, "Цена", NULL);
worksheet_write_string(worksheet, 0, 3, "Итого", NULL);
// Данные
worksheet_write_string(worksheet, 1, 0, "Яблоки", NULL);
worksheet_write_number(worksheet, 1, 1, 100, NULL);
worksheet_write_number(worksheet, 1, 2, 2.5, NULL);
// Формула
worksheet_write_formula(worksheet, 1, 3, "=B2*C2", NULL);
workbook_close(workbook);
return 0;
}
Для компиляции используйте:
g++ -o create_excel create_excel.cpp -lxlsxwriter
2. xlsxio — чтение и простая запись
xlsxio — легковесная библиотека на C, ориентированная на чтение XLSX-файлов. Она поддерживает потоковый разбор, что позволяет обрабатывать большие файлы без загрузки в память.
Установка
git clone https://github.com/brechtsanders/xlsxio.git
cd xlsxio
mkdir build && cd build
cmake ..
make
sudo make install
Пример: чтение данных из Excel
#include <xlsxio_read.h>
int main() {
xlsxioreader xlsxioread = xlsxioread_open("data.xlsx");
if (!xlsxioread) return 1;
xlsxioreadersheet sheet = xlsxioread_sheet_open(xlsxioread, NULL, 0);
if (sheet) {
while (xlsxioread_sheet_next_row(sheet)) {
const char* value;
while ((value = xlsxioread_sheet_next_cell(sheet)) != NULL) {
printf("%s\t", value);
}
printf("\n");
}
xlsxioread_sheet_close(sheet);
}
xlsxioread_close(xlsxioread);
return 0;
}
3. OpenXLSX — современный C++ интерфейс
OpenXLSX — библиотека на C++17, которая предоставляет объектно-ориентированный API для работы с XLSX. Поддерживает чтение, запись, стили и работу с несколькими листами.
Установка
git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
mkdir build && cd build
cmake .. -DOPENXLSX_BUILD_TESTS=OFF
make
sudo make install
Пример: запись с форматированием
#include <OpenXLSX/OpenXLSX.hpp>
int main() {
using namespace OpenXLSX;
XLDocument doc;
doc.create("formatted.xlsx");
auto wks = doc.workbook().worksheet("Sheet1");
// Запись с форматом
XLCellValue val = "Hello, Excel!";
wks.cell("A1").value() = val;
wks.cell("A1").font().setBold(true);
wks.cell("A1").font().setSize(14);
doc.save();
return 0;