Вступ
Aspose.Cells FOSS for 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, заснований на тому, що фактично реалізовано, під permissive license.
Що включено
Структура робочої книги та листа
A 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");
Ззначення клітинок, формули та числові формати
Cell::PutValue має перевантаження для рядків, цілих чисел, double, булевих значень та інших типів значень, тому ручне перетворення рядків не потрібно. 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 керують явним вибором формату у цих викликах.
Open Source & Ліцензування
Aspose.Cells FOSS для C++ має ліцензію MIT. Повний вихідний код доступний на GitHub, і ліцензія дозволяє комерційне використання, модифікацію та розповсюдження.