Введение

Aspose.Cells FOSS для C++ — это open-source библиотека для создания, загрузки, редактирования и сохранения Excel .xlsx книг из нативного кода C++, без необходимости в Microsoft Excel или любой COM-автоматизации. Она интегрируется в сборку на основе CMake как библиотека-исходник — внешних зависимостей во время выполнения, кроме стандартной библиотеки C++, не требуется.

Библиотека распространяется под лицензией MIT и ориентирована на C++17. Она собирается с помощью add_subdirectory или FetchContent из git-клона, поскольку не распространяется через менеджер пакетов, такой как vcpkg или Conan. Поверхность API организована вокруг Workbook, который владеет WorksheetCollection, листами, которые предоставляют объект Cells для доступа к ячейкам, и фасад Style для шрифтов, заливок и границ. Если вы создаёте бэкенд-сервисы, генераторы отчетов или конвейеры экспорта данных на C++ и вам нужно генерировать или читать файлы .xlsx без обращения к Excel, эта библиотека предоставляет вам нативный способ сделать это.

Aspose.Cells FOSS также доступен для .NET, Go, Java, Python, Rust и TypeScript. Библиотека C++ следует тому же подходу, что и остальные члены семейства: ориентированный на XLSX API, основанный на том, что действительно реализовано, под свободной лицензией.


Что включено

Структура книги и листов

В Workbook начинается с одного листа. Дополнительные листы создаются с помощью WorksheetCollection::Add, а существующие листы доступны по индексу или имени через индексатор коллекции. Каждый Worksheet раскрывает свои ячейки через GetCells().

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"

using namespace Aspose::Cells_FOSS;

Workbook workbook;
workbook.GetWorksheets()[0].SetName("Data");
workbook.GetWorksheets().Add("Summary");

Worksheet& data = workbook.GetWorksheets()["Data"];
data.GetCells()["A1"].PutValue("Product");
data.GetCells()["B1"].PutValue("Price");

Знaчения ячеек, формулы и числовые форматы

Cell::PutValue имеет перегрузки для строк, целых чисел, двойных, логических значений и других типов значений, поэтому ручное преобразование строк не требуется. SetFormula принимает формулу с или без ведущего = и нормализует её; GetType затем сообщает CellValueType значения Formula. Форматирование чисел применяется через Style::SetNumberFormat и влияет только на отображаемый текст, возвращаемый GetDisplayStringValue — базовое сохранённое значение остаётся без изменений.

auto& sheet = workbook.GetWorksheets()[0];
auto cell = sheet.GetCells()["B2"];
cell.PutValue(1234.567);

auto style = cell.GetStyle();
style.SetNumberFormat("#,##0.00");
cell.SetStyle(style);

sheet.GetCells()["B3"].SetFormula("B2*2");
// GetFormula() now returns "=B2*2"; GetType() reports CellValueType::Formula

std::cout << cell.GetDisplayStringValue() << std::endl; // "1,234.57"

Оформление шрифтами, заливками и границами

Cell::GetStyle() и SetStyle() читают и записывают объект Style, который объединяет Font, Borders и настройки заливки. Цвета создаются с помощью Color::FromArgb, а шаблоны заливки задаются через FillPattern.

Style headerStyle = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
headerStyle.SetFont(font);
headerStyle.SetPattern(FillPattern::Solid);
headerStyle.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
sheet.GetCells()["A1"].SetStyle(headerStyle);

Проверка данных и условное форматирование

ValidationCollection::Add ограничивает правило Validation диапазоном CellArea; установка его ValidationType в List со значением Formula1 создаёт выпадающий список в ячейке. ConditionalFormattingCollection::Add создаёт группу форматирования, которая ограничена AddArea и заполняется AddCondition, который принимает FormatConditionType, OperatorType и одну или две формулы.

int validationIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B1", "B3"));
auto validation = sheet.GetValidations()[validationIndex];
validation.SetType(ValidationType::List);
validation.SetFormula1("\"Open,Closed\"");
validation.SetShowError(true);

int cfIndex = sheet.GetConditionalFormattings().Add();
auto formatting = sheet.GetConditionalFormattings()[cfIndex];
formatting.AddArea(CellArea::CreateCellArea("C1", "C3"));
int conditionIndex = formatting.AddCondition(
    FormatConditionType::CellValue, OperatorType::Between, "1", "9");

auto condition = formatting[conditionIndex];
auto conditionStyle = condition.GetStyle();
conditionStyle.SetPattern(FillPattern::Solid);
conditionStyle.SetForegroundColor(Color::FromArgb(255, 255, 199, 206));
condition.SetStyle(conditionStyle);

Настройка страницы и макет печати

Worksheet::GetPageSetup() возвращает объект PageSetup, управляющий размером бумаги, ориентацией, масштабированием, областью печати и строками/столбцами заголовков печати. Значения проверяются при присвоении — например, вызов SetScale с выходящим за диапазон значением вызывает CellsException.

auto& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(3);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$2");

Быстрый старт

Aspose.Cells FOSS для C++ не распространяется через менеджер пакетов — клонируйте репозиторий и добавьте его в ваш CMake-проект:

git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git

Добавьте библиотеку как подкаталог вашего собственного CMakeLists.txt и привяжите её к цели aspose_cells_foss:

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp/Aspose.Cells.Foss.Cpp)
target_link_libraries(MyApp PRIVATE aspose_cells_foss)

Затем создайте, оформите и сохраните рабочую книгу:

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Font.h"
#include "aspose/cells_foss/Color.h"

using namespace Aspose::Cells_FOSS;

int main() {
    Workbook workbook;
    Worksheet& sheet = workbook.GetWorksheets()[0];
    sheet.SetName("Products");

    sheet.GetCells()["A1"].PutValue("Product");
    sheet.GetCells()["B1"].PutValue("Price");
    sheet.GetCells()["A2"].PutValue("Apple");
    sheet.GetCells()["B2"].PutValue(2.99);
    sheet.GetCells()["A3"].PutValue("Orange");
    sheet.GetCells()["B3"].PutValue(1.99);
    sheet.GetCells()["B4"].SetFormula("SUM(B2:B3)");

    Style header = sheet.GetCells()["A1"].GetStyle();
    Font font;
    font.SetBold(true);
    header.SetFont(font);
    sheet.GetCells()["A1"].SetStyle(header);

    workbook.Save("products.xlsx");
    return 0;
}

Поддерживаемые форматы

ФорматРасширениеЧтениеЗапись
XLSX.xlsx✓✓

XLSX — единственный формат, который текущий релиз умеет читать и записывать. Конструкторы файлов и потоков Workbook загружают данные .xlsx, а Save записывает их обратно; перечисления LoadFormat и SaveFormat управляют явным выбором формата в этих вызовах.


Открытый исходный код и лицензирование

Aspose.Cells FOSS для C++ имеет лицензию MIT. Полный исходный код доступен на GitHub, и лицензия разрешает коммерческое использование, модификацию и распространение.


Начало работы

Связанные ресурсы