Вступ
Управління електронними таблицями — це частина Aspose.Cells FOSS для C++, яку більшість програм спочатку використовує: Workbook, який володіє файлом, об’єкти Worksheet, що знаходяться всередині, і колекція Cells, яка містить значення, формули та форматування. У цьому дописі розглядається ця поверхня глибше, ніж у загальному вступі — як створюються та навігуються книги та листи, як читаються та записуються значення клітинок і формули, як Style, Font, Color і Borders комбінуються для форматування виводу, і як PageSetup, Hyperlink, DefinedName і Validation додають структуру навколо сирої сітки клітинок.
Кожен клас, розглянутий тут, є частиною рідного C++ API, оголошеного у заголовках aspose/cells_foss/. Не використовується COM-interop і не потрібна установка Microsoft Excel — бібліотека безпосередньо читає і записує пакетний формат .xlsx, що також пояснює, чому поточний випуск підтримує лише .xlsx, як при завантаженні, так і при збереженні.
Наведені нижче приклади будують один на іншому: створюється книга, заповнюються листи та клітинки, застосовується стилізація, а файл зберігається і завантажується знову, щоб підтвердити успішний круговий прохід. Увесь код адаптовано з власних наборів сумісності, золотих та юніт-тестів бібліотеки, тому він відображає операції, які випробовуються на реальному виведенні .xlsx.
Ключові особливості
Керування книгами та листами
Workbook починається з одного листа у своєму WorksheetCollection. Листи додаються за допомогою Add(), їх можна знайти за індексом або за назвою, і перейменувати за допомогою SetName(). WorksheetCollection також відстежує, який лист активний:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
using namespace Aspose::Cells_FOSS;
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Data");
int summaryIndex = workbook.GetWorksheets().Add("Summary");
workbook.GetWorksheets().SetActiveSheetIndex(0);
int sheetCount = workbook.GetWorksheets().GetCount(); // 2
Збереження та повторне завантаження проходять через той самий тип Workbook. Workbook::Save() приймає шлях до файлу, а Workbook можна створити безпосередньо з шляху або з буфера байтів у пам’яті, що забезпечує круговий обмін значеннями клітинок та формулами:
workbook.Save("report.xlsx");
Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];
Значення клітинок та формули
Cells, доступний через Worksheet::GetCells(), індексує клітини за посиланням у стилі A1. Cell::PutValue() приймає рядки, цілі числа, числа з плаваючою комою та логічні значення, SetFormula() зберігає рядок формули Excel, а GetValue() повертає CellValue з типізованими доступниками (AsString(), AsInteger(), AsDouble(), AsBool(), AsDateTime()):
Cells& cells = sheet.GetCells();
cells["A1"].PutValue("Category");
cells["B1"].PutValue("Amount");
cells["A2"].PutValue("Travel");
cells["B2"].PutValue(482.50);
cells["A3"].PutValue("Supplies");
cells["B3"].PutValue(129.99);
cells["B4"].SetFormula("=SUM(B2:B3)");
CellValue amount = cells["B2"].GetValue();
if (amount.IsDouble()) {
double value = amount.AsDouble();
}
std::string formula = cells["B4"].GetFormula();
Cell::GetType() повідомляє про збережений CellValueType (Blank, String, Number, Boolean, DateTime або Formula), а GetDisplayStringValue() повертає значення, відформатоване так, як воно виглядатиме в Excel, дотримуючись будь-якого числового формату, застосованого через Style.
Стилізація за допомогою Style, Font, Color та Borders
Cell::GetStyle() повертає об’єкт Style, який можна змінювати та повторно застосовувати за допомогою SetStyle(). Style надає Font, набір Borders, шаблон заповнення та колір, вирівнювання та числовий формат:
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Color.h"
Cell headerCell = sheet.GetCells()["A1"];
Style style = headerCell.GetStyle();
Font font = style.GetFont();
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
style.SetFont(font);
style.SetPattern(FillPattern::Solid);
style.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
style.SetHorizontalAlignment(HorizontalAlignmentType::Center);
Borders borders = style.GetBorders();
Border bottomBorder = borders.GetBottom();
bottomBorder.SetLineStyle(BorderStyleType::Thin);
borders.SetBottom(bottomBorder);
style.SetBorders(borders);
style.SetNumberFormat("#,##0.00");
headerCell.SetStyle(style);
Style є типом значення: зчитування його назад за допомогою GetStyle() відображає те, що останнє було встановлено за допомогою SetStyle(), що спрощує створення одного стилю та його застосування до рядка заголовка або діапазону даних клітинок.
Налаштування сторінки та параметри друку
Worksheet::GetPageSetup() повертає об’єкт PageSetup, який охоплює розмір паперу, орієнтацію, поля, масштабування, заголовки для друку та розриви сторінок:
#include "aspose/cells_foss/PageSetup.h"
PageSetup& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(0);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$1");
pageSetup.SetLeftMargin(0.5);
pageSetup.SetCenterFooter("Page &P of &N");
pageSetup.AddHorizontalPageBreak(20);
Поля доступні як у необроблених одиницях (GetLeftMargin()), так і в дюймах (GetLeftMarginInch()), а GetHorizontalPageBreaks() / GetVerticalPageBreaks() повертають позиції розривів сторінок, які наразі встановлені на листі.
Гіперпосилання, визначені імена та перевірка даних
Worksheet::GetHyperlinks() повертає HyperlinkCollection. Add() приймає цільову клітинку або діапазон плюс адресу і повертає індекс нового гіперпосилання, який використовується для отримання об’єкта Hyperlink для подальших змін:
#include "aspose/cells_foss/Hyperlink.h"
sheet.GetCells()["A1"].PutValue("Documentation");
int linkIndex = sheet.GetHyperlinks().Add("A1", 1, 1, "https://example.com/docs");
Hyperlink link = sheet.GetHyperlinks()[linkIndex];
link.SetTextToDisplay("Documentation");
link.SetScreenTip("Open the docs site");
Workbook::GetDefinedNames() керує іменованими діапазонами так само — Add() повертає індекс у DefinedNameCollection:
#include "aspose/cells_foss/DefinedName.h"
int nameIndex = workbook.GetDefinedNames().Add("Total", "=Data!$B$2:$B$3");
DefinedName total = workbook.GetDefinedNames()[nameIndex];
total.SetComment("Sum of tracked expenses");
Worksheet::GetValidations() слідує тому ж шаблону колекції для правил перевірки даних, обмежених CellArea:
#include "aspose/cells_foss/Validation.h"
#include "aspose/cells_foss/CellArea.h"
int ruleIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B2", "B3"));
Validation amountRule = sheet.GetValidations()[ruleIndex];
amountRule.SetType(ValidationType::Decimal);
amountRule.SetOperator(OperatorType::GreaterThan);
amountRule.SetFormula1("0");
amountRule.SetErrorTitle("Invalid Amount");
amountRule.SetErrorMessage("Enter a positive number");
Властивості документа та налаштування книги
Workbook::GetDocumentProperties() надає основні та розширені поля метаданих OOXML (title, author, company, manager та подібні), а Workbook::GetSettings() керує поведінкою на рівні книги, такою як система дат:
#include "aspose/cells_foss/DocumentProperties.h"
workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");
workbook.GetSettings().SetDate1904(false);
Ці значення проходять цикл збереження та повторного завантаження так само, як і вміст клітинок, що корисно для звітів, які потребують послідовних метаданих у згенерованих файлах.
Швидкий старт
Aspose.Cells FOSS для C++ збирається з вихідного коду за допомогою CMake. Клонуйте репозиторій і або додайте його як підкаталог, або підключіть його за допомогою FetchContent:
git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
cmake_minimum_required(VERSION 3.15)
project(MyProject CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)
Мінімальний приклад керування електронними таблицями — створення, стилізація, збереження та повторне завантаження:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Expenses");
Cells& cells = sheet.GetCells();
cells["A1"].PutValue("Category");
cells["B1"].PutValue("Amount");
cells["A2"].PutValue("Travel");
cells["B2"].PutValue(482.50);
cells["A3"].PutValue("Supplies");
cells["B3"].PutValue(129.99);
cells["B4"].SetFormula("=SUM(B2:B3)");
workbook.Save("expenses.xlsx");
Workbook loaded("expenses.xlsx");
Cells& loadedCells = loaded.GetWorksheets()["Expenses"].GetCells();
double total = loadedCells["B4"].GetValue().AsDouble();
return 0;
}
Підтримувані формати
| Формат | Розширення | Читати | Запис |
|---|---|---|---|
| Xlsx | .xlsx | ✓ | ✓ |
LoadFormat та SaveFormat у цьому випуску надають єдине значення Xlsx; конструктори Workbook(path) і Workbook(bytes) завантажують вхідні дані .xlsx, а Workbook::Save() записує вихідні дані .xlsx у шлях, потік або буфер у пам’яті.
Відкритий код та ліцензування
Aspose.Cells FOSS для C++ випускається під ліцензією MIT. Вихідний код доступний на GitHub, і бібліотеку можна використовувати, змінювати та розповсюджувати у комерційних та відкритих проектах без плати за виконання.