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

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

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

Начать курс

Работа с 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;                    

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