Giriş
Aspose.Cells FOSS for C++ iki katmandan oluşur. Çoğu kodun dokunduğu katman facade’tir: Workbook, Worksheet, Cell ve Style, bunlar bu platformun duyuru ve özellik gönderilerinin kapsadığı şeydir. Bunun altında, Aspose::Cells_FOSS::Core namespace’inde bulunan ikinci bir katman yer alır; düz veri kayıtlarından oluşur — WorkbookModel, WorksheetModel, CellRecord, StyleValue ve yaklaşık kırk iki ilgili *Model ve *Value türü. Bu kayıtlar gerçek ayrıştırılmış elektronik tablo durumunu tutar: CellAddress ile anahtarlanan hücre değerleri, StyleValue olarak stil öznitelikleri, çalışma kitabı ve çalışma sayfası ayarları, sayfa düzeni, filtreler ve yük teşhisleri. Facade sınıfları, durumu kendileri depolamak yerine bu katmandan okur ve yazar.
İki katman arasındaki köprü açık ve public’tır. Workbook::GetModel() bir Core::WorkbookModel döndürür, Worksheet::GetModel() bir Core::WorksheetModel döndürür ve Style::ToCore() / Style::FromCore() bir değiştirilebilir Style‘yı bir Core::StyleValue‘ye ve tersine dönüştürür. DocumentProperties::GetModel() ve ExtendedDocumentProperties::GetModel() belge meta verileri için aynı şeyi yapar. Bir tüketici, günlük hücre düzenleme API’dan daha dar bir dizi durumda bu katmana doğrudan ulaşır: bir çalışma kitabı yüklenirken veya kaydedilirken kaydedilen DiagnosticBag‘i incelemek, çalışma kitabı düzeyindeki StyleRepository aracılığıyla bir stili normalleştirmek veya Cell / Row sarmalayıcı nesneler yerine düz veri hücre ve satır kayıtlarıyla doğrudan çalışmak.
Burada açıklanan her şey, C++ için Aspose.Cells FOSS’ın geri kalanıyla aynı MIT lisanslı, bağımlılıksız kaynak ağacında, CMake ile derlenmiş ve önceden derlenmiş bir ikili yerine başlıklar ve kaynak olarak dahil edilmiştir. Eğer facade API ile henüz çalışmadıysanız, önce Workbook/Worksheet/Cell özellikleri gönderisiyle başlayın — bu gönderi o temeli varsayar ve altında yatanlara odaklanır.
Neler Dahildir
Çalışma Kitabı ve Çalışma Sayfası Model Ağacı
Core::WorkbookModel kök kayıttır. GetWorksheets() bir std::deque<WorksheetModel> döndürür, GetSettings() bir WorkbookSettingsModel, GetProperties() bir WorkbookPropertiesModel, GetDocumentProperties() bir DocumentPropertiesModel, GetDiagnostics() bir DiagnosticBag, GetStyles() bir StyleRepository, GetSharedStrings() bir SharedStringRepository, ve GetDefaultStyle() / SetDefaultStyle() bir StyleValue. Ayrıca GetActiveSheetIndex() ve GetDefinedNames() kaynağından bir std::vector<DefinedNameModel> izler. Workbook::GetModel() bu kaydın giriş noktasıdır.
Core::WorksheetModel, Worksheet::GetModel() aracılığıyla erişilen, hücreleri std::unordered_map<CellAddress, CellRecord> olarak GetCells() yoluyla, satırları std::unordered_map<int, RowModel> olarak GetRows() yoluyla, sütun aralıklarını std::vector<ColumnRangeModel> olarak GetColumns() yoluyla ve birleştirilmiş aralıkları std::vector<MergeRegion> olarak GetMergeRegions() yoluyla depolar. Ayrıca GetHyperlinks(), GetValidations(), GetConditionalFormattings(), GetPageSetup(), GetView(), GetProtection(), GetAutoFilter(), GetTabColor() ve GetVisibility() (bir SheetVisibility değeri: Visible, Hidden veya VeryHidden) taşır.
CellAddress, o hücre haritası için kullanılan hashlenebilir anahtar tipidir. A1 tarzı metni sıfır tabanlı satır/sütun indekslerine ve geri çözer — bu, bu kümedeki doğrudan test kapsamına sahip birkaç sınıftan biridir FOSS deposunda:
#include "aspose/cells_foss/core/CellAddress.h"
using namespace Aspose::Cells_FOSS;
Core::CellAddress parsed = Core::CellAddress::Parse("AB3");
// parsed.GetRowIndex() == 2 (zero-based row index)
// parsed.GetColumnIndex() == 27 (zero-based column index)
// parsed.ToString() == "AB3"
CellRecord, bir hücrenin CellValue, CellValueKind, isteğe bağlı bir formül dizesi, bir StyleValue ve bir GetIsExplicitlyStored() bayrağını tutar; bu bayrak, gerçekten yazılmış bir hücreyi sadece bir satır veya sütun varsayılanı dokunduğu için var olan bir hücreden ayırır. RowModel, isteğe bağlı bir yükseklik, gizli bir bayrak ve isteğe bağlı bir stil indeksi taşır; ColumnRangeModel, aynı üç öğeyi ve uygulandığı min/maks sütun yayılımını taşır. MergeRegion, sade bir ilk-satır/ilk-sütun/toplam-satır/toplam-sütun dikdörtgenidir.
Stil Verileri Düz Değerler Olarak
StyleValue, değiştirilebilir Style ön yüzünün Core karşılığıdır — Style::ToCore(), bir Style’ı buna dönüştürür ve Style::FromCore(), birinden Style oluşturur. GetFont() (FontValue), GetPattern() (FillPatternKind), GetForegroundColor() / GetBackgroundColor() (ColorValue), GetBorders() (BordersValue), GetAlignment() (AlignmentValue), GetProtection() (ProtectionValue) ve GetNumberFormat() (NumberFormatValue) ile birlikte statik bir StyleValue::Default() ve bir Clone() gruplar. FontValue, Font alanını alan bazında yansıtır: name, size, bold, italic, underline, strike-through ve bir ColorValue. ColorValue kendisi sade bir ARGB demetidir (GetA(), GetR(), GetG(), GetB(), Equals(), GetHashCode()) — ön yüz Color sınıfının aksine FromArgb()-stil fabrikası yoktur, bu yüzden bir ColorValue genellikle doğrudan oluşturulmak yerine mevcut bir stilden elde edilir.
BordersValue, beş BorderSideValue üyesi tutar — left, right, top, bottom ve diagonal — her biri bir BorderStyle enum değeri ile bir ColorValue eşleştirir. AlignmentValue, yatay ve dikey hizalama, metni kaydırma, girinti seviyesi, metin döndürme, sığdırmak için küçültme ve okuma sırasını modeller. ProtectionValue ve NumberFormatValue, hücre koruma bayraklarını ve Style tarafından ortaya konan sayı formatı kimliği/özel dize çiftini destekler.
StyleRepository, WorkbookModel::GetStyles() aracılığıyla erişilen, tek bir işlem sunar: Normalize(style) -> StyleValue. Çalışma kitabı, yükleme ve kaydetme sırasında eşdeğer stilleri iç içe geçirmek için bunu dahili olarak kullanır; aynı StyleValue kayıtlarını çoğaltmak yerine — bu, mevcut API yüzeyinde indeks tabanlı arama yapan genel amaçlı bir stil önbelleği değildir.
Belge Özellikleri ve Çalışma Kitabı Düzeyi Ayarları
DocumentPropertiesModel grupları GetCore() (CoreDocumentPropertiesModel: başlık, konu, oluşturucu, anahtar kelimeler, açıklama, son-değiştiren, revizyon, kategori, içerik durumu ve created/modified zaman damgaları) ve GetExtended() (ExtendedDocumentPropertiesModel: uygulama, uygulama sürümü, şirket, yönetici, doküman güvenliği, hiperlink temeli ve ölçek-kırpma / bağlantılar-güncel / paylaşılan-doküman bayrakları). DocumentProperties::GetModel() ve ExtendedDocumentProperties::GetModel() bu kayıtlarla facade sınıfları arasında köprü kurar.
WorkbookPropertiesModel WorkbookProperties yansıtır — kod adı, göster-nesneler, filtre gizliliği, yedek-dosya ve ilgili bayraklar — ve WorkbookProtectionModel‘yi (kilit yapısı/pencereler/revizyon, çalışma kitabı ve revizyon şifreleri), WorkbookViewModel‘ü (pencere konumu ve boyutu, ilk görünen sayfa, kaydırma çubuğu ve sayfa sekmesi görünürlüğü, sekme oranı, küçültülmüş durum, otomatik filtre tarih gruplaması), ve CalculationPropertiesModel‘ü (hesaplama modu, yineleme ayarları, tam hassasiyet, eşzamanlı hesaplama) içerir. WorkbookSettingsModel bir DateSystem değeri (Windows1900 veya Mac1904) ve bir görüntü kültürü taşır — WorkbookSettings::GetDate1904() / GetCulture()‘ın model düzeyindeki karşılığı. Bu gruptaki çoğu *Model türü CopyFrom(source) ve HasStoredState() öğelerini ortaya çıkarır; bunlar serileştirici tarafından XML yazılmadan önce açıkça ayarlanmış bir değeri ayarlanmamış bir varsayılan değerden ayırmak için kullanılır.
Çalışma Sayfası Özellik Modelleri
WorksheetProtectionModel WorksheetProtection alanını alan bazında yansıtır ve saklanan şifre alanlarını — GetPasswordHash(), GetAlgorithmName(), GetHashValue(), GetSaltValue(), GetSpinCount() — ekler; bu alanlar facade WorksheetProtection tarafından doğrudan ortaya konmaz. WorksheetViewModel ızgara çizgisi, başlık ve sıfır görünürlüğü, sağdan sola düzen ve yakınlaştırma ölçeğini tutar. PageSetupModel PageMarginsModel‘i (sol/sağ/üst/alt/başlık/alt bilgi kenar boşlukları double olarak), PrintOptionsModel‘i (ızgara çizgileri, başlıklar, yatay ve dikey ortalama) ve HeaderFooterModel‘yi (sol/ortalanmış/sağ başlık ve alt bilgi metni) içerir; ayrıca kağıt boyutu, yönelim, ölçek, genişliğe/yüksekliğe sığdır, baskı alanı, baskı başlığı satırları/sütunları ve sayfa kesme vektörleri.
AutoFilterModel bir aralık dizesi, bir std::vector<FilterColumnModel> ve bir AutoFilterSortStateModel tutar. FilterColumnModel ise AutoFilterColorFilterModel, AutoFilterDynamicFilterModel ve AutoFilterTop10Model‘yı, ayrıca düz bir filtre değeri dizesi listesi ve bir std::vector<AutoFilterCustomFilterModel>‘yi içerir. ConditionalFormattingModel, bir std::vector<CellArea> ile bir std::vector<FormatConditionModel>‘u eşleştirir — her koşul türünü, operatörünü, formüllerini, renk ölçeği/veri çubuğu/ikon seti alanlarını ve sonuç biçimi için bir StyleValue‘i taşır. ValidationModel ve HyperlinkModel, Validation ve Hyperlink facade’larını düz kayıtlar olarak yansıtır ve DefinedNameModel, DefinedName‘yi yansıtır. SheetVisibility, Worksheet::GetVisibilityType()‘un model katmanı enum’udur.
Bu kayıtların desteklediği facade özelliklerinden bazıları — özellikle AutoFilter ve ConditionalFormattingCollection — ürün belgelerinde bu sürümde hâlâ aktif geliştirme aşamasında olduğu belirtilmiştir. Yukarıdaki şekilleri model ve serileştiricinin etrafında inşa edildiği yapısal hedef olarak değerlendirin; bunun bugün kaydedilmiş bir çalışma kitabı üzerinden her alanın sorunsuz bir şekilde geri dönüştürüleceği garantisi olmadığını unutmayın.
Tanılamalar ve Paylaşılan Durum
DiagnosticBag, WorkbookModel::GetDiagnostics() aracılığıyla erişilen, DiagnosticEntry kayıtlarını toplar — her biri bir GetCode(), bir GetSeverity() (DiagnosticSeverity: Warning, Recoverable veya LossyRecoverable), bir GetMessage(), bir GetRepairApplied() bayrağı ve bir GetDataLossRisk() bayrağı içerir — bu kayıtlar bir çalışma kitabı ayrıştırılırken veya serileştirirken üretilir. Bu, Workbook::GetLoadDiagnostics() ile paralel çalışır; bunun facade seviyesindeki LoadDiagnostics / LoadIssue türleri aynı DiagnosticSeverity enum’unu paylaşır; LoadIssue sarmalayıcısı yerine ham model kaydına ihtiyaç duyan kod, çalışma kitabı modelinde GetDiagnostics() aracılığıyla ona ulaşır.
SharedStringRepository xlsx shared-strings tablosunu destekler: GetValues() iç içe geçmiş string vektörünü döndürür, TryGetValue(index, value) bir indeksi tekrar metne çözer ve Intern(value) bir girişi ekler veya yeniden kullanır — SaveOptions::SetUseSharedStrings(true) ayarlandığında dahili olarak kullanılır. DateSerialConverter bir DateTime ile Excel’in bir hücrede sakladığı OLE tarzı seri numarası arasında dönüşüm yapar, bir DateSystem alarak 1900- ve 1904-tabanlı çalışma kitaplarının aynı takvim tarihine çözülmesini sağlar.
Hızlı Başlangıç
Kütüphaneyi bir CMake projesine alt dizin olarak ekleyin ve tanımladığı hedefi bağlayın:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)
Aşağıdaki örnek, bir hücreyi facade aracılığıyla yazar, ardından temel modele ulaşarak bir tanı çantası ve bir CellAddress ayrıştırması alır — aynı işlem WorksheetModel::GetCells() hücre haritasını anahtarlamak için dahili olarak kullanır:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/core/CellAddress.h"
#include <iostream>
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Report");
sheet.GetCells()["A1"].PutValue("Total");
workbook.Save("report.xlsx");
Core::CellAddress address = Core::CellAddress::Parse("A1");
std::cout << "Row: " << address.GetRowIndex()
<< " Column: " << address.GetColumnIndex() << "\n";
for (const auto& entry : workbook.GetModel().GetDiagnostics().GetEntries()) {
std::cout << "Diagnostic: " << entry.GetMessage() << "\n";
}
return 0;
}
Desteklenen Biçimler
| Biçim | Uzantı | Oku | Yaz |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
Burada açıklanan model katmanı, xlsx okuyucu ve yazarının çalıştığı bellek içi temsildir; kütüphanenin geri kalanının desteklediği Xlsx içe/dışa aktarma dışında başka bir dosya formatına bağlı değildir.
Açık Kaynak & Lisanslama
Aspose.Cells FOSS for C++ MIT lisanslıdır. Bu gönderide referans verilen Aspose::Cells_FOSS::Core model başlıkları dahil kaynak kod, GitHub‘de bulunur; ticari kullanım, değişiklik ve yeniden dağıtım izinlidir.