Aspose.Cells for C++'da Özet Tabloları Yenileme

Giriş

Bir özet tablosunu yenileme nadiren tek bir işlemdir. Sahne arkasında Aspose.Cells, orijinal kaynak verilerinizi çalışma sayfasında gördüğünüz işlenmiş değerlere bağlayan katmanlı bir veri zinciri tutar. Bu zinciri anlamak, herhangi bir durum için doğru yenileme API’sini seçmenin anahtarıdır. Dört katmanlı veri zinciri şudur:

  1. Veri Kaynağı — ham değerlerin yaşadığı orijinal çalışma sayfası aralıkları, veritabanı sorgusu veya konsolidasyon aralığı.
  2. PivotCache — kaynak verilerin bellek içi anlık görüntüsü. Her özet tablosu bir PivotCache üzerine kuruludur; tüm veriler burada toplanır ve birleştirilir.
  3. PivotTable — satır, sütun, değer ve filtre alanlarını tanımlayan görünüm nesnesi. Bir PivotTable yalnızca kendi PivotCache‘inden okur, doğrudan veri kaynağından asla okumaz.
  4. CellsPivotTable‘ın hesaplanmış değerlerini ve stillerini işlediği çalışma sayfası Cells öğeleri. Özellikle önemli bir kavram paylaşılan önbellektir (shared cache). Çalışma kitabındaki birden çok özet tablosu aynı kaynak aralığa başvurduğunda, tek bir PivotCache örneğini paylaşırlar. Tek bir PivotCache‘e birçok özet tablosu tarafından başvurulabilir ve bu önbelleği yenilemek, ona bağlı her PivotTable‘ı bir kerede yeniler. Bu zincir nedeniyle, Aspose.Cells’te iki temel yenileme yolu vardır:
  • PivotCache.Refresh() — kaynaktan önbelleğe veriyi yeniden yükler VE tek bir işlemde tüm bağımlı PivotTableları yeniden hesaplar.
  • PivotTable.CalculateData() — zaten önbelleğe alınmış veriden tek bir PivotTable‘ın görüntüsünü yeniden hesaplar; veri kaynağına geri dönüş yoktur. Bu makaledeki tüm senaryolar çalışma sayfası hücre kaynak verilerini kullanır, dolayısıyla kaynak türü Sheet‘tir ve yenileme işlemleri anlatıldığı gibi davranır.

Gerekli Include Direktifleri

Bu makaledeki tüm C++ örnekleri aşağıdaki başlık include ve namespace direktifleriyle başlar çünkü pivot türleri Aspose::Cells::Pivot namespace’inde yaşar:

  • #include <system/object.h>
  • #include "Aspose.Cells.h"
  • using namespace Aspose::Cells;
  • using namespace Aspose::Cells::Pivot;

Çalışma Kitabındaki Tüm Özet Tablolarını Yenileme

Çalışma kitabındaki her pivot önbelleğinin ve her özet tablosunun en son kaynak verilerini yansıttığından emin olmanız gerektiğinde, en basit ve en kapsamlı API Workbook.RefreshAll()‘dur. Tek bir çağrı tüm çalışma kitabını dolaşır — her PivotCache‘i kendi kaynağından yeniler ve sonra ona bağlı her PivotTable‘ı yeniden hesaplar. Performansın sorun olmadığı genel, tüm belge yenilemeleri için önerilen yaklaşım budur. Aşağıdaki örnek bir Fruit/Year/Amount kaynak aralığına sahip bir çalışma kitabı oluşturur, bir özet tablosu ekler, bazı kaynak değerlerini değiştirir ve ardından her şeyi tek bir çağrıyla güncellemek için RefreshAll() kullanır.

#include "Aspose.Cells.h"

using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;

int main() {
    Aspose::Cells::Startup();

    Workbook wb;
    Worksheet worksheet = wb.GetWorksheets().Get(0);
    Cells cells = worksheet.GetCells();

    cells.Get(u"A1").PutValue(U16String("Fruit"));
    cells.Get(u"B1").PutValue(U16String("Year"));
    cells.Get(u"C1").PutValue(U16String("Amount"));

    cells.Get(u"A2").PutValue(U16String("grape"));
    cells.Get(u"B2").PutValue(2020);
    cells.Get(u"C2").PutValue(50);

    cells.Get(u"A3").PutValue(U16String("blueberry"));
    cells.Get(u"B3").PutValue(2020);
    cells.Get(u"C3").PutValue(60);

    cells.Get(u"A4").PutValue(U16String("kiwi"));
    cells.Get(u"B4").PutValue(2020);
    cells.Get(u"C4").PutValue(70);

    cells.Get(u"A5").PutValue(U16String("cherry"));
    cells.Get(u"B5").PutValue(2020);
    cells.Get(u"C5").PutValue(80);

    cells.Get(u"A6").PutValue(U16String("grape"));
    cells.Get(u"B6").PutValue(2021);
    cells.Get(u"C6").PutValue(90);

    cells.Get(u"A7").PutValue(U16String("blueberry"));
    cells.Get(u"B7").PutValue(2021);
    cells.Get(u"C7").PutValue(100);

    cells.Get(u"A8").PutValue(U16String("kiwi"));
    cells.Get(u"B8").PutValue(2021);
    cells.Get(u"C8").PutValue(110);

    cells.Get(u"A9").PutValue(U16String("cherry"));
    cells.Get(u"B9").PutValue(2021);
    cells.Get(u"C9").PutValue(120);

    int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C9", u"E3", u"Pivot1");
    PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);

    pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");

    cells.Get(u"C2").PutValue(55);
    cells.Get(u"C5").PutValue(85);
    cells.Get(u"C9").PutValue(125);

    pivotTable.CalculateData();

    wb.Save(u"output.xlsx");

    Aspose::Cells::Cleanup();
    return 0;
}

Tek Bir Çalışma Sayfasındaki Tüm Özet Tablolarını Yenileme

Bazen yalnızca belirli bir çalışma sayfasında yaşayan özet tablolarını yenilemeniz gerekir — örneğin, diğer çalışma sayfalarındaki özet tablolarının ilgisiz olduğu biliniyorsa ve bunlara dokunulmaması gerekiyorsa. Bu durum için Aspose.Cells, tek bir Worksheet örneğiyle sınırlı olan Worksheet.RefreshPivotTables() sağlar. Bu, Workbook.RefreshAll()‘dan daha seçicidir: yalnızca hedeflenen çalışma sayfasındaki özet tabloları yenilenir, diğer çalışma sayfalarındaki özet tablolarına dokunulmaz. Aşağıdaki örnek aynı Fruit/Year/Amount kaynak verilerini doldurur, ilk çalışma sayfasına bir özet tablosu ekler, bazı kaynak değerlerini değiştirir ve ardından yalnızca o çalışma sayfasındaki özet tablolarını yeniler.

#include "Aspose.Cells.h"

using namespace Aspose::Cells;

int main() {
    Aspose::Cells::Startup();

    Workbook workbook;
    Worksheet worksheet = workbook.GetWorksheets().Get(0);

    worksheet.GetCells().Get(u"A1").PutValue(u"Fruit");
    worksheet.GetCells().Get(u"B1").PutValue(u"Year");
    worksheet.GetCells().Get(u"C1").PutValue(u"Amount");

    worksheet.GetCells().Get(u"A2").PutValue(u"grape");
    worksheet.GetCells().Get(u"B2").PutValue(2020);
    worksheet.GetCells().Get(u"C2").PutValue(100);

    worksheet.GetCells().Get(u"A3").PutValue(u"blueberry");
    worksheet.GetCells().Get(u"B3").PutValue(2021);
    worksheet.GetCells().Get(u"C3").PutValue(150);

    worksheet.GetCells().Get(u"A4").PutValue(u"kiwi");
    worksheet.GetCells().Get(u"B4").PutValue(2020);
    worksheet.GetCells().Get(u"C4").PutValue(200);

    worksheet.GetCells().Get(u"A5").PutValue(u"cherry");
    worksheet.GetCells().Get(u"B5").PutValue(2021);
    worksheet.GetCells().Get(u"C5").PutValue(120);

    worksheet.GetCells().Get(u"A6").PutValue(u"grape");
    worksheet.GetCells().Get(u"B6").PutValue(2021);
    worksheet.GetCells().Get(u"C6").PutValue(180);

    worksheet.GetCells().Get(u"A7").PutValue(u"blueberry");
    worksheet.GetCells().Get(u"B7").PutValue(2020);
    worksheet.GetCells().Get(u"C7").PutValue(130);

    worksheet.GetCells().Get(u"A8").PutValue(u"kiwi");
    worksheet.GetCells().Get(u"B8").PutValue(2021);
    worksheet.GetCells().Get(u"C8").PutValue(220);

    worksheet.GetCells().Get(u"A9").PutValue(u"cherry");
    worksheet.GetCells().Get(u"B9").PutValue(2020);
    worksheet.GetCells().Get(u"C9").PutValue(140);

    int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C9", u"E3", u"Pivot1");
    PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);

    pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");

    worksheet.GetCells().Get(u"C2").PutValue(300);
    worksheet.GetCells().Get(u"C5").PutValue(250);
    worksheet.GetCells().Get(u"C9").PutValue(400);

    worksheet.RefreshPivotTables();

    workbook.Save(u"output.xlsx");

    Aspose::Cells::Cleanup();
    return 0;
}

Tek Bir Özet Tablosunu Yenileme

Tek bir özet tablosu üzerinde ayrıntılı denetim istediğinizde, önbellek tabanlı API size iki seçenek sunar. Aralarındaki seçim, gerçekte neyin değiştiğine bağlıdır: temel kaynak veriler mi yoksa yalnızca özet tablosunun kendi görünüm/düzen ayarları mı.

Kaynak Veriler Değişti — PivotCache.Refresh() Kullanın

Temel kaynak veriler değiştiyse, doğru giriş noktası pivotTable.GetPivotCache().Refresh()‘tir. Bu çağrı, kaynak verileri önbelleğe geri okur ve ardından o önbelleğe bağlı her PivotTable‘ı yeniden hesaplar.

Aşağıdaki örnek, paylaşılan önbellek davranışını göstermek için aynı kaynak aralığına iki özet tablosu oluşturur, bazı kaynak değerlerini değiştirir ve ardından bir önbellek başvurusu aracılığıyla yeniler.

#include "Aspose.Cells.h"

using namespace Aspose::Cells;

int main() {
    Aspose::Cells::Startup();

    Workbook workbook;
    Worksheet worksheet = workbook.GetWorksheets().Get(0);
    Cells cells = worksheet.GetCells();

    // Başlık satırı: Meyve / Yıl / Miktar
    cells.Get(u"A1").PutValue(u"Fruit");
    cells.Get(u"B1").PutValue(u"Year");
    cells.Get(u"C1").PutValue(u"Amount");

    // Veri satırları
    cells.Get(u"A2").PutValue(u"Grape");
    cells.Get(u"B2").PutValue(2020);
    cells.Get(u"C2").PutValue(100);

    cells.Get(u"A3").PutValue(u"Blueberry");
    cells.Get(u"B3").PutValue(2020);
    cells.Get(u"C3").PutValue(200);

    cells.Get(u"A4").PutValue(u"Kiwi");
    cells.Get(u"B4").PutValue(2020);
    cells.Get(u"C4").PutValue(300);

    cells.Get(u"A5").PutValue(u"Cherry");
    cells.Get(u"B5").PutValue(2020);
    cells.Get(u"C5").PutValue(400);

    cells.Get(u"A6").PutValue(u"Grape");
    cells.Get(u"B6").PutValue(2021);
    cells.Get(u"C6").PutValue(500);

    cells.Get(u"A7").PutValue(u"Blueberry");
    cells.Get(u"B7").PutValue(2021);
    cells.Get(u"C7").PutValue(600);

    cells.Get(u"A8").PutValue(u"Kiwi");
    cells.Get(u"B8").PutValue(2021);
    cells.Get(u"C8").PutValue(700);

    cells.Get(u"A9").PutValue(u"Cherry");
    cells.Get(u"B9").PutValue(2021);
    cells.Get(u"C9").PutValue(800);

    // E3 hücresine bağlanmış, A1:C9 kaynak aralığına sahip ilk pivot tablo "Pivot1" ekle
    int pivotIndex1 = worksheet.GetPivotTables().Add(u"A1:C9", u"E3", u"Pivot1");
    PivotTable pivotTable1 = worksheet.GetPivotTables().Get(pivotIndex1);

    // Pivot1 için alanları ata
    pivotTable1.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable1.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable1.AddFieldToArea(PivotFieldType::Data, u"Amount");

    // Aynı A1:C9 kaynak aralığını kullanarak E15 hücresine bağlanmış İKİNCİ pivot tablo "Pivot2" ekle
    int pivotIndex2 = worksheet.GetPivotTables().Add(u"A1:C9", u"E15", u"Pivot2");
    PivotTable pivotTable2 = worksheet.GetPivotTables().Get(pivotIndex2);

    // Pivot2 için aynı alanları ata
    pivotTable2.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable2.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable2.AddFieldToArea(PivotFieldType::Data, u"Amount");

    // Veri değişikliğini simüle etmek için kaynak verilerdeki birkaç Miktar hücresi değerini değiştir
    cells.Get(u"C2").PutValue(150);
    cells.Get(u"C4").PutValue(350);
    cells.Get(u"C7").PutValue(650);

    // Pivot tablo verilerini yenileyerek paylaşılan PivotCache'i yenile
    pivotTable1.RefreshData();

    // Çalışma kitabını kaydet
    workbook.Save(u"output.xlsx");

    Aspose::Cells::Cleanup();
    return 0;
}

Yalnızca Görünüm/Düzen Değişti — CalculateData() Kullanın

Kaynak veriler değişmediyse ancak yalnızca özet tablosunun görünüm veya düzen ayarları değiştirildiyse (örneğin, bir alan farklı bir bölgeye taşındıysa veya açılışta yenileme ayarı değiştirildiyse), veri kaynağına geri dönmek gerekmez. Önbellek zaten doğru verileri tutar; yalnızca işlenmiş PivotTable‘ın yeniden hesaplanması gerekir. Bu durumda pivotTable.CalculateData() doğru seçimdir. Bu, gereksiz kaynak getirmesini önler ve birçok özet tablosu aynı önbelleği paylaştığında önemli ölçüde daha hızlıdır. Aşağıdaki örnek, özet tablosunun kaynak olmayan bir özelliğini değiştirir ve ardından onu mevcut önbellekten yeniden işlemek için CalculateData() çağırır.

#include "Aspose.Cells.h"

using namespace Aspose::Cells;

int main() {
    Aspose::Cells::Startup();

    Workbook workbook;
    Worksheet worksheet = workbook.GetWorksheets().Get(0);

    // Meyve / Yıl / Miktar başlık satırını yaz
    worksheet.GetCells().Get(u"A1").PutValue(u"Fruit");
    worksheet.GetCells().Get(u"B1").PutValue(u"Year");
    worksheet.GetCells().Get(u"C1").PutValue(u"Amount");

    // 8 veri satırı yaz (2-9. satırlar, A1:C9 kaynak aralığına uyuyor)
    worksheet.GetCells().Get(u"A2").PutValue(u"Grape");
    worksheet.GetCells().Get(u"B2").PutValue(2020);
    worksheet.GetCells().Get(u"C2").PutValue(100);

    worksheet.GetCells().Get(u"A3").PutValue(u"Blueberry");
    worksheet.GetCells().Get(u"B3").PutValue(2020);
    worksheet.GetCells().Get(u"C3").PutValue(200);

    worksheet.GetCells().Get(u"A4").PutValue(u"Kiwi");
    worksheet.GetCells().Get(u"B4").PutValue(2020);
    worksheet.GetCells().Get(u"C4").PutValue(300);

    worksheet.GetCells().Get(u"A5").PutValue(u"Cherry");
    worksheet.GetCells().Get(u"B5").PutValue(2020);
    worksheet.GetCells().Get(u"C5").PutValue(400);

    worksheet.GetCells().Get(u"A6").PutValue(u"Grape");
    worksheet.GetCells().Get(u"B6").PutValue(2021);
    worksheet.GetCells().Get(u"C6").PutValue(150);

    worksheet.GetCells().Get(u"A7").PutValue(u"Blueberry");
    worksheet.GetCells().Get(u"B7").PutValue(2021);
    worksheet.GetCells().Get(u"C7").PutValue(250);

    worksheet.GetCells().Get(u"A8").PutValue(u"Kiwi");
    worksheet.GetCells().Get(u"B8").PutValue(2021);
    worksheet.GetCells().Get(u"C8").PutValue(350);

    worksheet.GetCells().Get(u"A9").PutValue(u"Cherry");
    worksheet.GetCells().Get(u"B9").PutValue(2021);
    worksheet.GetCells().Get(u"C9").PutValue(450);

    // E3 hedef hücresine yerleştirilen, A1:C9 kaynaklı "Pivot1" adlı bir pivot tablo ekle
    int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C9", u"E3", u"Pivot1");
    PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);

    // Alanları ata: Fruit Satır'a, Year Sütun'a, Amount Veri'ye
    pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");

    // Bir görünüm/düzen özelliğini değiştir — bu yalnızca sunumla ilgili bir değişikliktir,
    // bu nedenle PivotCache.Refresh() aracılığıyla kaynak verilerin yeniden okunmasını GEREKTIRMEZ.
    pivotTable.SetRefreshDataOnOpeningFile(false);

    // CalculateData() BU pivot tablosunun görüntüsünü (veri + stil) PivotCache'de
    // zaten tutulan verilerden yeniden işler. Kaynak veriler değişmediği için,
    // kaynağa gidiş-dönüş gerçekleştirilmez — yalnızca önbelleğe alınmış değerler yeniden hesaplanır
    // ve çalışma sayfası hücrelerine yazılır.
    pivotTable.CalculateData();

    // Çalışma kitabını diske kaydet
    workbook.Save(u"output.xlsx");

    Aspose::Cells::Cleanup();
    return 0;
}

Aynı PivotCache’i Paylaşan Tüm Özet Tablolarını Alma

Bir çalışma kitabı genellikle tek bir paylaşılan önbelleğin üzerinde duran birçok özet tablosu içerir. Bunları numaralandırmak için — örneğin, toplu bir yenileme gerçekleştirmeden önce veya paylaşılan önbellek etkisini teşhis etmek için — PivotCache.GetPivotTables() kullanın. Bu yöntem, verilen önbelleğe bağlı olan her PivotTable‘ın koleksiyonunu döndürür. Bu, iki özet tablosunun gerçekten aynı PivotCache örneğini paylaştığını doğrulamanın en doğrudan yoludur: önbellek başvurularını karşılaştırabilir veya GetPivotTables() tarafından döndürülen koleksiyonu yineleyerek hangi özet tablolarının onun içinde göründüğünü gözlemleyebilirsiniz. Aşağıdaki örnek, aynı kaynak aralığına iki özet tablosu oluşturur, aynı önbellek örneğini paylaştıklarını doğrular ve ardından önbelleğin özet tablolarını numaralandırır.

Kullanımdan Kaldırılan PivotTable.RefreshData()‘dan Geçiş

Aspose.Cells for C++ v26.7’den önce, bir özet tablosunu yenilemenin standart yolu her özet tablosunda ayrı ayrı PivotTable.RefreshData() çağırmaktı. v26.7 itibarıyla, bu yöntem kullanımdan kaldırılmış (obsolete) olarak işaretlenmiş olup yukarıda anlatılan önbellek farkında (cache-aware) API’lerle değiştirilmelidir. Gerçek dünya çalışma kitaplarında tablo başına RefreshData() yaklaşımının sorunlu olmasının iki nedeni vardır:

  • Kaynak değişmemiş olsa bile her çağrıldığında veriyi kaynaktan yeniden getirir.
  • Her çağrı tüm paylaşılan önbelleği yeniler. Birçok özet tablosu tek bir önbelleği paylaştığında, özet tablosu başına art arda RefreshData() çağırmak, aynı önbelleğin tekrar tekrar yeniden getirilmesine neden olur; bu da çok yavaştır. Önerilen değiştirmeler şunlardır:
  • Çalışma kitabındaki TÜM özet tablolarını yenilemeworkbook.RefreshAll(); kullanın
  • Bazılarını yenileme → bir önbellek için pivotTable.GetPivotCache().Refresh(); kullanın. Önbellek paylaşıldığından, bu tek çağrı o önbelleğin üzerine kurulu her özet tablosunu günceller. Zaten yenilenmiş bir önbellek üzerinde duran diğer özet tabloları güvenle atlanabilir.
  • Yalnızca pivot görünümü/düzeni değişti → kaynak round-trip’i olmadan mevcut önbellekten yeniden işlemek için pivotTable.CalculateData(); kullanın. Aşağıdaki örnek, tek bir önbelleği paylaşan birden çok özet tablosuna sahip çalışma kitapları için yeni verimli kalıbı göstermektedir.
#include "Aspose.Cells.h"

using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;

int main() {
    Aspose::Cells::Startup();

    Workbook wb;
    Worksheet sheet = wb.GetWorksheets().Get(0);

    sheet.GetCells().Get(u"A1").PutValue(u"Fruit");
    sheet.GetCells().Get(u"B1").PutValue(u"Year");
    sheet.GetCells().Get(u"C1").PutValue(u"Amount");

    sheet.GetCells().Get(u"A2").PutValue(u"Grape");      sheet.GetCells().Get(u"B2").PutValue(2020); sheet.GetCells().Get(u"C2").PutValue(1000);
    sheet.GetCells().Get(u"A3").PutValue(u"Blueberry");  sheet.GetCells().Get(u"B3").PutValue(2020); sheet.GetCells().Get(u"C3").PutValue(2000);
    sheet.GetCells().Get(u"A4").PutValue(u"Kiwi");       sheet.GetCells().Get(u"B4").PutValue(2020); sheet.GetCells().Get(u"C4").PutValue(1500);
    sheet.GetCells().Get(u"A5").PutValue(u"Cherry");     sheet.GetCells().Get(u"B5").PutValue(2020); sheet.GetCells().Get(u"C5").PutValue(2500);
    sheet.GetCells().Get(u"A6").PutValue(u"Grape");      sheet.GetCells().Get(u"B6").PutValue(2021); sheet.GetCells().Get(u"C6").PutValue(3000);
    sheet.GetCells().Get(u"A7").PutValue(u"Blueberry");  sheet.GetCells().Get(u"B7").PutValue(2021); sheet.GetCells().Get(u"C7").PutValue(1800);
    sheet.GetCells().Get(u"A8").PutValue(u"Kiwi");       sheet.GetCells().Get(u"B8").PutValue(2021); sheet.GetCells().Get(u"C8").PutValue(2200);
    sheet.GetCells().Get(u"A9").PutValue(u"Cherry");     sheet.GetCells().Get(u"B9").PutValue(2021); sheet.GetCells().Get(u"C9").PutValue(2700);

    int idx1 = sheet.GetPivotTables().Add(u"A1:C9", u"E3", u"Pivot1");
    PivotTable pivotTable1 = sheet.GetPivotTables().Get(idx1);
    pivotTable1.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable1.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable1.AddFieldToArea(PivotFieldType::Data, u"Amount");

    int idx2 = sheet.GetPivotTables().Add(u"A1:C9", u"E15", u"Pivot2");
    PivotTable pivotTable2 = sheet.GetPivotTables().Get(idx2);
    pivotTable2.AddFieldToArea(PivotFieldType::Row, u"Fruit");
    pivotTable2.AddFieldToArea(PivotFieldType::Column, u"Year");
    pivotTable2.AddFieldToArea(PivotFieldType::Data, u"Amount");

    sheet.GetCells().Get(u"C2").PutValue(5000);
    sheet.GetCells().Get(u"C5").PutValue(7500);
    sheet.GetCells().Get(u"C9").PutValue(9500);


    pivotTable2.CalculateData();

    wb.Save(u"output.xlsx");

    Aspose::Cells::Cleanup();
    return 0;
}

Hangi Yenileme API’sini Kullanmalıyım?

Aşağıdaki tablo mevcut yenileme API’lerini özetlemekte ve her birinin ne zaman seçileceğini göstermektedir.

Amaç Önerilen API Notlar
Çalışma kitabındaki her şeyi yenileme Workbook.RefreshAll() Tek çağrı; tüm önbellekleri ve tabloları kapsar.
Yalnızca tek bir sayfadaki özet tablolarını yenileme Worksheet.RefreshPivotTables() Tek bir çalışma sayfasıyla sınırlı.
Bir önbellek için kaynak veriler değişti pivotTable.GetPivotCache().Refresh() O paylaşılan önbellekteki TÜM özet tablolarını yeniler.
Yalnızca görünüm/düzen ayarları değişti pivotTable.CalculateData() Gereksiz kaynak round-trip’ini atlar.
Paylaşılan bir önbellekteki tüm özet tablolarını listeleme pivotCache.GetPivotTables() Toplu yenilemeden önce numaralandırmak için kullanın.
Uygulamada, kullanımdan kaldırılmış tablo başına RefreshData() yerine önbellek tabanlı API’leri tercih edin. Bunlar paylaşılan önbelleklerin farkındadır, gereksiz kaynak getirmelerini önler ve yenileme gereksiniminizi karşılayan en küçük kapsamı seçmenize olanak tanır.