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
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| 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.