Wprowadzenie

Zarządzanie arkuszami kalkulacyjnymi jest częścią Aspose.Cells FOSS dla C++, z którą większość programów ma do czynienia jako pierwsza: Workbook będącym właścicielem pliku, obiektami Worksheet wewnątrz niego oraz kolekcją Cells, która przechowuje wartości, formuły i formatowanie. Ten wpis omawia tę warstwę bardziej szczegółowo niż ogólne wprowadzenie — jak tworzyć i nawigować skoroszytami oraz arkuszami, jak odczytywać i zapisywać wartości komórek oraz formuły, jak Style, Font, Color i Borders łączą się w celu formatowania wyjścia oraz jak PageSetup, Hyperlink, DefinedName i Validation dodają strukturę wokół surowej siatki komórek.

Każda klasa omówiona tutaj jest częścią natywnego C++ API zadeklarowanego w nagłówkach aspose/cells_foss/. Nie ma interoperacyjności COM ani zależności od zainstalowanego Microsoft Excel — biblioteka odczytuje i zapisuje format pakietu .xlsx bezpośrednio, co jest także powodem, że bieżące wydanie obsługuje wyłącznie .xlsx, zarówno przy wczytywaniu, jak i zapisywaniu.

Poniższe przykłady budują na sobie nawzajem: tworzony jest skoroszyt, wypełniane są arkusze i komórki, stosowane jest formatowanie, a plik jest zapisywany i ponownie wczytywany w celu potwierdzenia poprawności. Wszystkie fragmenty kodu są adaptowane z własnych zestawów testów kompatybilności, złotych oraz jednostkowych biblioteki, więc odzwierciedlają operacje wykonywane na rzeczywistym wyjściu .xlsx.


Kluczowe funkcje

Zarządzanie skoroszytem i arkuszami

Workbook rozpoczyna się od jednego arkusza w swoim WorksheetCollection. Arkusze są dodawane za pomocą Add(), wyszukiwane według indeksu lub nazwy oraz przemianowywane przy użyciu SetName(). WorksheetCollection także śledzi, który arkusz jest aktywny:

#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

Zapisywanie i wczytywanie odbywa się przy użyciu tego samego typu Workbook. Workbook::Save() przyjmuje ścieżkę do pliku, a Workbook może być utworzony bezpośrednio ze ścieżki lub z bufora bajtów w pamięci, co umożliwia dwukierunkowe przenoszenie wartości komórek i formuł:

workbook.Save("report.xlsx");

Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];

Wartości i Formuły Komórek

Cells, dostępny przez Worksheet::GetCells(), indeksuje komórki za pomocą odwołań w stylu A1. Cell::PutValue() przyjmuje ciągi znaków, liczby całkowite, podwójnej precyzji oraz wartości logiczne, SetFormula() przechowuje ciąg formuły Excel, a GetValue() zwraca CellValue z typowanymi akcesorami (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() zgłasza przechowywany CellValueType (Blank, String, Number, Boolean, DateTime lub Formula), a GetDisplayStringValue() zwraca wartość sformatowaną tak, jak byłaby wyświetlana w Excelu, uwzględniając dowolny format liczbowy zastosowany przez Style.

Stylowanie przy użyciu Style, Font, Color i Borders

Cell::GetStyle() zwraca obiekt Style, który można modyfikować i ponownie zastosować za pomocą SetStyle(). Style udostępnia Font, zestaw Borders, wzór wypełnienia i kolor, wyrównanie oraz format liczbowy:

#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 jest typem wartości: odczytanie go ponownie za pomocą GetStyle() odzwierciedla to, co ostatnio ustawiono przy użyciu SetStyle(), co ułatwia stworzenie jednego stylu i zastosowanie go w całym wierszu nagłówka lub w zakresie komórek danych.

Ustawienia strony i konfiguracja drukowania

Worksheet::GetPageSetup() zwraca obiekt PageSetup obejmujący rozmiar papieru, orientację, marginesy, skalowanie, tytuły wydruku i podziały stron:

#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);

Marginesy są dostępne zarówno w surowych jednostkach (GetLeftMargin()), jak i w calach (GetLeftMarginInch()), a GetHorizontalPageBreaks() / GetVerticalPageBreaks() zwracają pozycje podziałów stron aktualnie ustawione na arkuszu.

Hipertłącza, nazwy zdefiniowane i walidacja danych

Worksheet::GetHyperlinks() zwraca HyperlinkCollection. Add() przyjmuje docelową komórkę lub zakres oraz adres i zwraca indeks nowego hiperłącza, który jest używany do pobrania obiektu Hyperlink w celu dalszych zmian:

#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() zarządza zakresami nazwanymi w ten sam sposób — Add() zwraca indeks do 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() stosuje ten sam wzorzec kolekcji dla reguł walidacji danych, ograniczonych do 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");

Właściwości dokumentu i ustawienia skoroszytu

Workbook::GetDocumentProperties() udostępnia podstawowe i rozszerzone pola metadanych OOXML (tytuł, autor, firma, menedżer i podobne), a Workbook::GetSettings() kontroluje zachowanie na poziomie skoroszytu, takie jak system dat:

#include "aspose/cells_foss/DocumentProperties.h"

workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");

workbook.GetSettings().SetDate1904(false);

Te wartości przechodzą pełny cykl zapisu i ponownego wczytania tak samo jak zawartość komórek, co jest przydatne w raportach, które wymagają spójnych metadanych w wygenerowanych plikach.


Szybki start

Aspose.Cells FOSS dla C++ jest budowane ze źródeł przy użyciu CMake. Sklonuj repozytorium i albo dodaj je jako podkatalog, albo pobierz je za pomocą 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)

Minimalny przykład zarządzania arkuszem kalkulacyjnym — tworzenie, stylowanie, zapisywanie i ponowne wczytywanie:

#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;
}

Obsługiwane formaty

FormatRozszerzenieOdczytZapis
Xlsx.xlsx✓✓

LoadFormat i SaveFormat udostępniają w tym wydaniu pojedynczą wartość Xlsx; konstruktory Workbook(path) i Workbook(bytes) wczytują dane .xlsx, a Workbook::Save() zapisuje dane .xlsx do ścieżki, strumienia lub bufora w pamięci.


Open Source i licencjonowanie

Aspose.Cells FOSS dla C++ jest wydany na licencji MIT. Kod źródłowy jest dostępny na GitHub, a biblioteka może być używana, modyfikowana i rozpowszechniana w projektach komercyjnych i open-source bez opłat za uruchomienie.


Rozpoczęcie

Powiązane zasoby