Работа с Excel в C++: библиотеки, примеры и инструменты

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Excel в C++: обзор библиотек и примеры кода

Несмотря на то, что C++ не имеет встроенной поддержки формата Excel, существует несколько зрелых библиотек, которые позволяют читать, создавать и редактировать файлы .xlsx и .xls. В этой статье мы рассмотрим три наиболее популярных инструмента: libxlsxwriter, xlsxio и OpenXLSX. Вы узнаете, как установить каждую из них, и получите рабочие примеры для типовых задач — от генерации отчётов до импорта данных.

1. libxlsxwriter — создание XLSX с нуля

libxlsxwriter — это лёгкая C-библиотека для записи файлов Excel 2007+ (XLSX). Она не требует COM-объектов или установленного Office. Поддерживает форматирование, формулы, диаграммы, объединение ячеек и условное форматирование.

Установка (Linux / macOS):

git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter
make
sudo make install

Пример: создание простого отчёта

#include <xlsxwriter.h>

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

    // Заголовки
    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, 1, 0, "Ноутбук", NULL);
    worksheet_write_number(worksheet, 1, 1, 10, NULL);
    worksheet_write_number(worksheet, 1, 2, 75000, NULL);

    // Формула суммы
    worksheet_write_formula(worksheet, 2, 2, "=C2*B2", NULL);

    workbook_close(workbook);
    return 0;
}

Компиляция: g++ -o create_excel create_excel.cpp -lxlsxwriter

Плюсы: высокая производительность, малый размер, активная поддержка.
Минусы: только запись (не умеет читать существующие файлы).

2. xlsxio — чтение и запись XLSX

xlsxio — библиотека на C с привязками для C++, которая поддерживает как чтение, так и запись XLSX-файлов. Основана на minizip и expat. Отлично подходит для потоковой обработки больших файлов.

Установка:

git clone https://github.com/brechtsanders/xlsxio.git
cd xlsxio
cmake .
make
sudo make install

Пример: чтение данных из Excel

#include <xlsxio_read.h>

int main() {
    xlsxioreader reader = xlsxioread_open("data.xlsx");
    if (reader) {
        xlsxioreadersheet sheet = xlsxioread_sheet_open(reader, NULL, XLSXIOREAD_SKIP_EMPTY_ROWS);
        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(reader);
    }
    return 0;
}

Компиляция: g++ -o read_excel read_excel.cpp -lxlsxio_read

Плюсы: двунаправленная работа, поддержка больших файлов.
Минусы: ограниченное форматирование (только строки и числа).

3. OpenXLSX — современный C++17 интерфейс

OpenXLSX — это header-only библиотека для C++17, которая предоставляет объектно-ориентированный API для чтения и записи XLSX. Не требует внешних зависимостей, кроме стандартной библиотеки.

Установка:

git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
mkdir build && cd build
cmake ..
make
sudo make install

Пример: создание файла с форматированием

#include <OpenXLSX/OpenXLSX.hpp>
using namespace OpenXLSX;

int main() {
    XLDocument doc;
    doc.create("styled_report.xlsx");
    auto wks = doc.workbook().worksheet("Sheet1");

    // Запись с форматированием
    XLCell cell = wks.cell("A1");
    cell                    

Рекомендаций