Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
PivotTable.RefreshData() yöntemi kullanımdan kaldırılmış olarak işaretlenmiştir ve bu makalede açıklanan daha verimli, önbellek farkındalığına sahip API’lerle değiştirilmelidir.
Bir pivot 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, her durum için doğru yenileme API’sini seçmenin anahtarıdır. Dört katmanlı veri zinciri şudur:
PivotCache üzerine inşa edilir; tüm veriler burada toplanır ve gruplanır.PivotTable, yalnızca kendi PivotCache‘inden okur, doğrudan veri kaynağından asla okumaz.PivotTable‘ın hesaplanan değerlerini ve stillerini işlediği çalışma sayfası Cells‘i.PivotCache.SourceType (PivotTableSourceType numaralandırması) önbellek verilerinin nereden geldiğini gösterir. v26.7 itibarıyla, PivotCache.Refresh() yalnızca Sheet ve Consolidation kaynak türlerini desteklemektedir — yani çalışma sayfası aralıklarında bulunan verileri. Harici kaynaklar (veritabanları, harici bağlantılar vb.) önbellek API’si aracılığıyla henüz yenilenemez.
Bu zincir nedeniyle, Aspose.Cells’te iki temel yenileme yolu vardır:
PivotTable.CalculateData() — bir PivotTable‘ın görüntüsünü zaten önbelleğe alınmış verilerden yeniden hesaplar, veri kaynağına geri dönüş olmaz.
Bu makaledeki tüm senaryolar çalışma sayfası hücresi kaynak verilerini kullanır, dolayısıyla kaynak türü Sheet‘tir ve yenileme işlemleri açıklandığı gibi çalışır.Çalışma kitabındaki her pivot’u yenileyen en kısa koda ihtiyacınız varsa, tek bir çağrı yeterlidir:
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
// A1:C1 hücrelerine başlık satırını yaz
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");
// A2:C9 hücrelerine veri satırlarını yaz (2020 ve 2021 yılları arasında 8 satır meyve verisi)
worksheet.getCells().get("A2").putValue("grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(50);
worksheet.getCells().get("A3").putValue("blueberry");
worksheet.getCells().get("B3").putValue(2020);
worksheet.getCells().get("C3").putValue(60);
worksheet.getCells().get("A4").putValue("kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(70);
worksheet.getCells().get("A5").putValue("cherry");
worksheet.getCells().get("B5").putValue(2020);
worksheet.getCells().get("C5").putValue(80);
worksheet.getCells().get("A6").putValue("grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(90);
worksheet.getCells().get("A7").putValue("blueberry");
worksheet.getCells().get("B7").putValue(2021);
worksheet.getCells().get("C7").putValue(100);
worksheet.getCells().get("A8").putValue("kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(110);
worksheet.getCells().get("A9").putValue("cherry");
worksheet.getCells().get("B9").putValue(2021);
worksheet.getCells().get("C9").putValue(120);
// Bir pivot tablo ekle: kaynak aralık "A1:C9", hedef hücre "E3", ad "Pivot1"
let pivotIndex = worksheet.getPivotTables().add("A1:C9", "E3", "Pivot1");
let pivotTable = worksheet.getPivotTables().get(pivotIndex);
// Pivot alanlarını ata: Satırlar için Meyve, Sütunlar için Yıl, Veri için Miktar
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Fruit");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
// Değişiklikleri simüle etmek için kaynak verilerdeki birkaç Miktar değerini değiştir
worksheet.getCells().get("C2").putValue(55);
worksheet.getCells().get("C5").putValue(85);
worksheet.getCells().get("C9").putValue(125);
// Çalışma kitabındaki tüm pivot tabloları / pivot önbelleklerini yenile
workbook.refreshAll();
// Çalışma kitabını kaydet
workbook.save("output.xlsx");
Bu makaledeki diğer her şey, bunun yerine ne zaman daha dar kapsamlı bir API seçmeniz gerektiğini açıklar.
Bu makaledeki tüm JavaScript örnekleri, Aspose.Cells for Node.js via C++ modülünün yüklendiğini ve pivot türlerinin Aspose.Cells.Pivot ad alanında yaşadığını varsayar. Tipik bir kurulum şudur:
const AsposeCells = require("aspose.cells.node");const { PivotFieldType } = AsposeCells; (veya AsposeCells.Pivot.PivotFieldType aracılığıyla erişin)Çalışma kitabındaki her pivot önbelleğinin ve her pivot tablosunun en son kaynak verileri yansıtmasını sağlamanız gerektiğinde, en basit ve en kapsamlı API Workbook.RefreshAll()‘dur. Tek bir çağrı tüm çalışma kitabını tarar — her PivotCache‘i kaynağından yeniler ve ardından ona bağlı her PivotTable‘ı yeniden hesaplar. Performansın sorun olmadığı genel, tam belge yenilemeleri için önerilen yaklaşım budur.
Aşağıdaki örnek, Meyve/Yıl/Tutar kaynak aralığına sahip bir çalışma kitabı oluşturur, bir pivot tablosu oluşturur, bazı kaynak değerlerini değiştirir ve ardından her şeyi tek bir çağrıyla güncel hale getirmek için RefreshAll()‘ı kullanır.
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");
worksheet.getCells().get("A2").putValue("grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(100);
worksheet.getCells().get("A3").putValue("blueberry");
worksheet.getCells().get("B3").putValue(2021);
worksheet.getCells().get("C3").putValue(150);
worksheet.getCells().get("A4").putValue("kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(200);
worksheet.getCells().get("A5").putValue("cherry");
worksheet.getCells().get("B5").putValue(2021);
worksheet.getCells().get("C5").putValue(120);
worksheet.getCells().get("A6").putValue("grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(180);
worksheet.getCells().get("A7").putValue("blueberry");
worksheet.getCells().get("B7").putValue(2020);
worksheet.getCells().get("C7").putValue(130);
worksheet.getCells().get("A8").putValue("kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(220);
worksheet.getCells().get("A9").putValue("cherry");
worksheet.getCells().get("B9").putValue(2020);
worksheet.getCells().get("C9").putValue(140);
let pivotIndex = worksheet.getPivotTables().add("A1:C9", "E3", "Pivot1");
let pivotTable = worksheet.getPivotTables().get(pivotIndex);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Fruit");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
worksheet.getCells().get("C2").putValue(300);
worksheet.getCells().get("C5").putValue(250);
worksheet.getCells().get("C9").putValue(400);
worksheet.refreshPivotTables();
workbook.save("output.xlsx");
Bazen yalnızca belirli bir çalışma sayfasında bulunan pivot tablolarını yenilemeniz gerekebilir — örneğin, diğer çalışma sayfalarındaki pivot tablolarının ilgisiz olduğu biliniyorsa ve bunlara dokunulmamalıdır. Bu durum için Aspose.Cells, tek bir Worksheet örneğiyle sınırlı olan Worksheet.RefreshPivotTables() yöntemini sağlar.
var workbook = new AsposeCells.Workbook();
var worksheet = workbook.getWorksheets().get(0);
// Meyve / Yıl / Miktar başlık satırını yaz
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");
// 8 veri satırı yaz (satır 2-9, kaynak aralığı A1:C9'a uyuyor)
worksheet.getCells().get("A2").putValue("Grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(100);
worksheet.getCells().get("A3").putValue("Blueberry");
worksheet.getCells().get("B3").putValue(2020);
worksheet.getCells().get("C3").putValue(200);
worksheet.getCells().get("A4").putValue("Kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(300);
worksheet.getCells().get("A5").putValue("Cherry");
worksheet.getCells().get("B5").putValue(2020);
worksheet.getCells().get("C5").putValue(400);
worksheet.getCells().get("A6").putValue("Grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(150);
worksheet.getCells().get("A7").putValue("Blueberry");
worksheet.getCells().get("B7").putValue(2021);
worksheet.getCells().get("C7").putValue(250);
worksheet.getCells().get("A8").putValue("Kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(350);
worksheet.getCells().get("A9").putValue("Cherry");
worksheet.getCells().get("B9").putValue(2021);
worksheet.getCells().get("C9").putValue(450);
// "Pivot1" adında, hedef hücre E3'e yerleştirilen ve A1:C9'dan kaynak alan bir pivot tablo ekle
var pivotIndex = worksheet.getPivotTables().add("A1:C9", "E3", "Pivot1");
var pivotTable = worksheet.getPivotTables().get(pivotIndex);
// Alanları ata: Satır için Meyve, Sütun için Yıl, Veri için Miktar
pivotTable.addFieldToArea(AsposeCells.Pivot.PivotFieldType.Row, "Fruit");
pivotTable.addFieldToArea(AsposeCells.Pivot.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.Pivot.PivotFieldType.Data, "Amount");
// Bir görünüm/düzen özelliğini değiştir — bu yalnızca sunum amaçlı bir değişikliktir,
// bu nedenle PivotCache.Refresh() aracılığıyla kaynak verilerin yeniden okunmasını gerektirmez.
pivotTable.setRefreshDataOnOpeningFile(false);
// CalculateData(), BU pivot tablonun görüntüsünü (veri + stil) PivotCache'te zaten
// tutulan verilerden yeniden oluşturur. Kaynak veriler değişmediği için,
// kaynağa gidiş-dönüş yapılmaz — yalnızca önbelleğe alınmış değerler yeniden hesaplanarak
// çalışma sayfası hücrelerine yazılır.
pivotTable.calculateData();
// Çalışma kitabını diske kaydet
workbook.save("output.xlsx");
Tek bir pivot tablosu üzerinde ayrıntılı kontrol 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 verileri mi yoksa yalnızca pivot tablosunun görünüm/düzen ayarları mı.
PivotCache.Refresh() KullanınTemel kaynak veriler değiştiyse, doğru giriş noktası pivotTable.PivotCache.Refresh()‘tır. Bu çağrı, kaynak verileri önbelleğe yeniden okur ve ardından o önbelleğe bağlı her PivotTable‘ı yeniden hesaplar.
CalculateData() KullanınKaynak veriler değişmediyse ancak yalnızca pivot 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.
Aşağıdaki örnek, pivot tablosunun kaynak olmayan bir özelliğini değiştirir ve ardından mevcut önbellekten yeniden işlemek için CalculateData()‘yı çağırır.
Bir çalışma kitabı genellikle tek bir paylaşılan önbelleğin üzerine yerleşmiş birçok pivot 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ı her PivotTable‘ın koleksiyonunu döndürür.
PivotTable.RefreshData()‘dan GeçişAspose.Cells for Node.js via C++ v26.7’den önce, bir pivot tablosunu yenilemenin standart yolu, her pivot tablosunda ayrı ayrı PivotTable.RefreshData() çağırmaktı. v26.7 itibarıyla, bu yöntem kullanımdan kaldırılmış olarak işaretlenmiştir ve yukarıda açıklanan önbellek farkındalığına sahip 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:
Aşağıdaki tablo, kullanılabilir yenileme API’lerini ve her birinin ne zaman seçileceğini özetlemektedir.
| 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 pivot tablolarını yenileme | Worksheet.RefreshPivotTables() |
Tek bir çalışma sayfasıyla sınırlıdır. |
| Bir önbellek için kaynak veriler değişti | pivotTable.PivotCache.Refresh() |
Paylaşılan önbellek üzerindeki TÜM pivot tablolarını yeniler. |
| Yalnızca görünüm/düzen ayarları değişti | pivotTable.CalculateData() |
Gereksiz kaynak geri dönüşünü atlar. |
| Paylaşılan önbellek üzerindeki tüm pivot 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 getirmelerinden kaçınır ve yenileme gereksiniminizi karşılayan en küçük kapsamı seçmenize olanak tanır. |
Workbook.save()‘dan önce PivotCache.Refresh() (veya Workbook.RefreshAll()) çağırın, aksi takdirde kaydedilen dosya hâlâ eski toplu değerleri içerir.RefreshData() çağırmak. v26.7’de PivotTable.RefreshData() kullanımdan kaldırılmış olarak işaretlenmiştir ve her çağrı için kaynağı yeniden getirir. Bir önbelleği paylaşan birden çok pivot tablosuyla bu, N gereksiz kaynak getirmesi anlamına gelir. Tablo başına tek bir PivotCache.Refresh() ve ardından CalculateData() ile değiştirin.ConsolidationFunction vb.) değiştirdiyseniz, PivotCache.Refresh() gereksiz ve yavaştır. Mevcut önbellekten yeniden işlemek için pivotTable.CalculateData()‘yı çağırın.PivotCache.Refresh() tarafından desteklenmeyen harici kaynak. Pivot tablosunun kaynağı harici bir bağlantıdan (veritabanı, OLAP küpü vb.) geliyorsa, PivotCache.Refresh() onu v26.7’de yenileyemez — şu anda yalnızca Sheet ve Consolidation kaynak türlerini desteklemektedir. Harici kaynaklar için çalışma kitabını yeniden açın veya önbelleği kaynaktan yeniden oluşturun.using Aspose.Cells;
Workbook workbook = new Workbook("input.xlsx");
workbook.RefreshAll();
workbook.Save("output.xlsx");
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.