Python üzerinden Java ile Sunumlarda Grafik Çalışma Sayfası Formüllerini Uygulama

Genel Bakış

PowerPoint grafikler genellikle kaynak verilerini gömülü bir çalışma sayfasında saklar. Aspose.Slides for Python via Java’da, bu çalışma sayfasına grafik veri çalışma kitabı aracılığıyla erişebilir, giriş değerleri yazabilir, hücrelere formüller atayabilir, desteklenen formülleri hesaplayabilir ve hesaplanan hücreleri grafik verisi olarak kullanabilirsiniz.

Bu makale tam formül iş akışını açıklar: bir grafik oluşturma, onun çalışma sayfasını doldurma, A1 tarzı veya R1C1 tarzı formüller atama, bunları yeniden hesaplama, hesaplanan değerleri okuma, bu hücreleri bir grafik serisine bağlama ve sunumu kaydetme. Ayrıca desteklenen formül sözdizimini, yerleşik fonksiyon alt kümesini, önbelleğe alınmış değerleri, desteklenmeyen formülleri ve elektronik tabloya özgü hataları tanımlar.

Grafik Çalışma Sayfaları ve Formüller

Bir grafik çalışma sayfası, bir grafik tarafından kullanılan kategorileri, seri adlarını ve değerleri içerir. PowerPoint’te, grafik veri editörünü açarak çalışma sayfasını inceleyebilirsiniz:

Gömülü çalışma sayfası açık olan PowerPoint grafiği, kategori ve seri verilerini gösteriyor

Aspose.Slides’te, çalışma sayfası ChartDataWorkbook sınıfı aracılığıyla sunulur. A1 tarzı formüller için ChartDataCell.setFormula, R1C1 tarzı formüller için ChartDataCell.setR1C1Formula kullanın. Giriş hücrelerini veya formülleri değiştirdikten sonra, desteklenen formülleri yeniden hesaplamak ve ilgili hücre değerlerini güncellemek için ChartDataWorkbook.calculateFormulas çağırın.

Hesaplanmış bir hücre hâlâ sonucunu ChartDataCell.getValue aracılığıyla sunar. Bu, kod içinde bir formül sonucunu incelemeniz veya hücreyi bir grafik veri noktası olarak kullanmanız gerektiğinde önemlidir.

Grafik Oluşturma ve Çalışma Sayfası Formüllerini Hesaplama

Aşağıdaki örnek uçtan uca bir iş akışını gösterir. Küme sütun grafiği oluşturur, örnek verileri temizler, çeyrek gelir ve gider değerlerini yazar, formüllerle karı hesaplar, sonuçları okur, hesaplanan hücreleri grafik değerleri olarak kullanır ve sunumu kaydeder.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ChartType, Presentation, SaveFormat

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 350)
    workbook = chart.getChartData().getChartDataWorkbook()
    worksheet_index = 0

    chart.getChartData().getSeries().clear()
    chart.getChartData().getCategories().clear()
    workbook.clear(worksheet_index)

    category1 = workbook.getCell(worksheet_index, "A2", "Q1")
    category2 = workbook.getCell(worksheet_index, "A3", "Q2")
    category3 = workbook.getCell(worksheet_index, "A4", "Q3")

    workbook.getCell(worksheet_index, "B1", "Revenue")
    workbook.getCell(worksheet_index, "C1", "Expenses")
    workbook.getCell(worksheet_index, "D1", "Profit")

    workbook.getCell(worksheet_index, "B2").setValue(120.0)
    workbook.getCell(worksheet_index, "C2").setValue(80.0)
    workbook.getCell(worksheet_index, "B3").setValue(150.0)
    workbook.getCell(worksheet_index, "C3").setValue(95.0)
    workbook.getCell(worksheet_index, "B4").setValue(135.0)
    workbook.getCell(worksheet_index, "C4").setValue(110.0)

    profit1 = workbook.getCell(worksheet_index, "D2")
    profit2 = workbook.getCell(worksheet_index, "D3")
    profit3 = workbook.getCell(worksheet_index, "D4")

    profit1.setFormula("B2-C2")
    profit2.setFormula("B3-C3")
    profit3.setFormula("B4-C4")

    workbook.calculateFormulas()

    q1_profit = float(profit1.getValue()) # 40
    q2_profit = float(profit2.getValue()) # 55
    q3_profit = float(profit3.getValue()) # 25

    print("Q1 profit: ", q1_profit)
    print("Q2 profit: ", q2_profit)
    print("Q3 profit: ", q3_profit)

    chart.getChartData().getCategories().add(category1)
    chart.getChartData().getCategories().add(category2)
    chart.getChartData().getCategories().add(category3)

    profit_series = chart.getChartData().getSeries().add(workbook.getCell(worksheet_index, "D1"), chart.getType())
    profit_series.getDataPoints().addDataPointForBarSeries(profit1)
    profit_series.getDataPoints().addDataPointForBarSeries(profit2)
    profit_series.getDataPoints().addDataPointForBarSeries(profit3)
    profit_series.getLabels().getDefaultDataLabelFormat().setShowValue(True)

    presentation.save("chart-formulas.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Grafik veri noktaları D2:D4 aralığını referans alır, bu nedenle grafik hesaplanan kar değerlerini kullanır. Bu iş akışında ayrı bir grafik‑yenileme çağrısı yoktur: önce çalışma kitabını yeniden hesaplayın, ardından hesaplanan hücrelere işaret eden grafik verisini kullanın ya da kaydedin.

A1-Stil Formüllerini Kullanma

A1 gösterimi sütunları harflerle, satırları sayılarla tanımlar. A1‑stil ifadeleri ChartDataCell.setFormula aracılığıyla atayın.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ChartType, Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 500, 300)
    workbook = chart.getChartData().getChartDataWorkbook()

    workbook.getCell(0, "C3").setValue(10)
    workbook.getCell(0, "F2").setValue(2)
    workbook.getCell(0, "G2").setValue(3)
    workbook.getCell(0, "H2").setValue(4)

    cell = workbook.getCell(0, "A2")
    cell.setFormula("C3+SUM(F2:H2)")

    workbook.calculateFormulas()

    value = cell.getValue() # 19
finally:
    presentation.dispose()

Yaygın A1 referans biçimleri şunlardır:

Referans Göreli Mutlak Karışık
Hücre A2 $A$2 A$2, $A2
Satır 2:2 $2:$2
Sütun A:A $A:$A
Aralık A2:C4 $A$2:$C$4 A$2:$C4, $A2:C$4

Göreli referanslar bir formül bir elektronik tablo uygulaması tarafından taşındığında veya kopyalandığında değişebilir. Mutlak referanslar her iki koordinatı da sabit tutar, karışık referanslar ise yalnızca bir satırı ya da bir sütunu sabitler.

R1C1-Stil Formüllerini Kullanma

R1C1 gösterimi satır ve sütunları sayısal olarak tanımlar. Göreli referanslar köşeli parantezlerdeki offset’leri kullanır. Bu sözdizimini ChartDataCell.setR1C1Formula aracılığıyla atayın.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ChartType, Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 500, 300)
    workbook = chart.getChartData().getChartDataWorkbook()

    workbook.getCell(0, "B2").setValue(12)
    workbook.getCell(0, "C2").setValue(5)

    cell = workbook.getCell(0, "D2")
    cell.setR1C1Formula("RC[-2]-RC[-1]")

    workbook.calculateFormulas()

    value = cell.getValue() # 7
finally:
    presentation.dispose()

Yaygın R1C1 referans biçimleri şunlardır:

Referans Göreli Mutlak Karışık
Hücre R[2]C[3] R2C3 R2C[3], R[2]C3
Satır R[2] R2
Sütun C[3] C3
Aralık R[2]C[3]:R[5]C[7] R2C3:R5C7 R2C3:R[5]C[7], R[2]C3:R5C[7]

Örneğin, D2 hücresinde RC[-2] aynı satırda iki sütun sola olan hücreyi (B2) ifade eder.

Formül Sabitleri ve Operatörleri

Yerleşik formül değerlendiricisi mantıksal değerleri, sayısal sabitleri, dizeleri, elektronik tablo hata değerlerini, aritmetik operatörleri ve karşılaştırma operatörlerini destekler.

Sabitler ve Literaller

Tür Örnekler Notlar
Mantıksal TRUE, FALSE A2=TRUE gibi mantıksal ifadelerde doğrudan kullanılabilir.
Sayısal 1, 0.5, .3, 1E-2 Yaygın ve bilimsel gösterimler desteklenir.
Dize "abc", "2/3/2020 12:00" Metin sabitleri formül içinde çift tırnak içinde yazılır.
Hata sonucu #DIV/0!, #N/A, #REF! Geçerli bir formül, normal bir sonuç yerine bir elektronik tablo hata değeri üretebilir.

Bu örnek çeşitli sabit türlerini kullanır:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpify.startJVM()

from asposeslides.api import ChartType, Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 500, 300)
    workbook = chart.getChartData().getChartDataWorkbook()

    workbook.getCell(0, "A2").setValue(False)
    workbook.getCell(0, "B2").setFormula("A2=TRUE")
    workbook.getCell(0, "C2").setFormula("1+0.5")
    workbook.getCell(0, "D2").setFormula(".3*1E-2")
    workbook.getCell(0, "E2").setFormula("\"abc\"")
    workbook.getCell(0, "F2").setFormula("2/0")

    workbook.calculateFormulas()

    logical_value = workbook.getCell(0, "B2").getValue() # Yanlış
    numeric_value = workbook.getCell(0, "C2").getValue() # 1.5
    scientific_value = workbook.getCell(0, "D2").getValue() # 0.003
    string_value = workbook.getCell(0, "E2").getValue() # abc
    error_value = workbook.getCell(0, "F2").getValue() # #DIV/0!
finally:
    presentation.dispose()

Aritmetik Operatörler

Operatör Anlamı Örnek
+ Toplama veya tekli artı 2+3
- Çıkarma veya eksi 2-3, -3
* Çarpma 2*3
/ Bölme 2/3
% Yüzde 30%
^ Üs 2^3

Değerlendirme sırasını açıkça belirtmek için parantez kullanın; örneğin (A2+B2)*C2.

Karşılaştırma Operatörleri

Karşılaştırma ifadeleri mantıksal değer döndürür.

Operatör Anlamı Örnek
= Eşit A2=3
<> Eşit değil A2<>3
> Büyük A2>3
>= Büyük veya eşit A2>=3
< Küçük A2<3
<= Küçük veya eşit A2<=3

Desteklenen Önceden Tanımlı Fonksiyonlar

Aspose.Slides, grafik çalışma sayfaları için yerleşik bir formül değerlendiricisi içerir, ancak tam bir Excel hesaplama motoru değildir. Belgelenen fonksiyon kümesi aşağıdaki ile sınırlıdır. ChartDataWorkbook.calculateFormulas tarafından yeniden hesaplanabileceği varsayılan rastgele bir Excel fonksiyonunu varsaymayın.

Fonksiyon Amacı veya desteklenen biçim Örnek
ABS Mutlak değer ABS(A2)
AVERAGE Aritmetik ortalama AVERAGE(B2:B5)
CEILING Bir sayıyı üstteki bir kat sayıya yuvarla CEILING(A2,5)
CHOOSE İndekse göre bir değer seç CHOOSE(A2,"Low","High")
CONCAT Metin değerlerini birleştir CONCAT(A2,B2)
CONCATENATE Metin değerlerini birleştir CONCATENATE(A2," ",B2)
DATE 1900 tarih sistemi kullanarak bir tarih değeri oluştur DATE(2026,8,19)
DAYS Tarihler arasındaki gün sayısını döndür DAYS(B2,A2)
FIND Bir metin değerini diğerinin içinde bul FIND("-",A2)
FINDB Bayt temelli metin araması FINDB("a",A2)
IF Koşullu sonuç IF(A2>0,A2,0)
INDEX Referans biçimi INDEX(A2:C4,2,3)
LOOKUP Vektör biçimi LOOKUP(A2,B2:B5,C2:C5)
MATCH Vektör biçimi MATCH(A2,B2:B5,0)
MAX Maksimum değer MAX(B2:B5)
SUM Değerleri toplar SUM(B2:B5)
VLOOKUP Dikey arama VLOOKUP(A2,B2:D10,3,FALSE)

Tabloda gösterilen kısıtlamalar önemlidir: INDEX referans biçiminde belgelenirken, LOOKUP ve MATCH vektör biçiminde belgelenmiştir. DATE 1900 tarih sistemini kullanır. Burada listelenmeyen özellik ve fonksiyonlar, Aspose.Slides formül değerlendiricisi tarafından desteklenmiyormuş gibi ele alınmalıdır.

Formülleri Tercih Edilen Kültürle Hesaplama

Bazı grafik çalışma kitabı fonksiyonları metni kültüre özgü kurallara göre yorumlar. Bu, çift bayt karakter seti (DBCS) kullanan diller için tasarlanmış fonksiyonlar için özellikle önemlidir. Bu tür formülleri doğru hesaplamak için LoadOptions oluşturun, tercih edilen kültürü SpreadsheetOptions.setPreferredCulture ile ayarlayın, elektronik tablo seçeneklerini LoadOptions.setSpreadsheetOptions aracılığıyla atayın ve ardından sunumu yükleyin.

Aşağıdaki örnek Japon kültürünü seçer, yapılandırılmış yükleme seçenekleriyle bir sunumu açar ve her grafik çalışma kitabı için ChartDataWorkbook.calculateFormulas çağrısını yapar:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Chart, LoadOptions, Presentation, SpreadsheetOptions
from java.util import Locale

japanese_culture = Locale.forLanguageTag("ja-JP")

spreadsheet_options = SpreadsheetOptions()
spreadsheet_options.setPreferredCulture(japanese_culture)

load_options = LoadOptions()
load_options.setSpreadsheetOptions(spreadsheet_options)

presentation = Presentation("presentation.pptx", load_options)
try:
    for slide in presentation.getSlides():
        for shape in slide.getShapes():
            if isinstance(shape, Chart):
                shape.getChartData().getChartDataWorkbook().calculateFormulas()
finally:
    presentation.dispose()

Tercih edilen kültür, sunum yükleme yapılandırmasının bir parçasıdır; bu nedenle, Presentation örneğini oluşturmadan önce belirtin. Çalışma kitabı formüllerinin beklediği kültürü kullanın; örneğin, Japon DBCS hesaplama kurallarına uyması gereken formüller için ja-JP kullanın.

Yeniden Hesaplama ve Önbelleğe Alınan Değerler

Elektronik tablo dosyaları genellikle bir formül ve onun son hesaplanmış değerini birlikte saklar. Aspose.Slides bu yüzden bir sunum yüklendiğinde ve ilgili grafik verisi değiştirilmediğinde, ChartDataCell.getValue üzerinden önbelleğe alınmış bir değeri okuyabilir.

Giriş hücrelerini veya formülleri değiştirdikten sonra eski önbellek sonucuna güvenmeyin. Hesaplanan değerleri okumadan ya da onlara bağlı grafik verisini kaydetmeden önce ChartDataWorkbook.calculateFormulas çağırın.

Desteklenen alt kümenin dışındaki formüller için, Aspose.Slides formülü ayrıştıramayabilir veya bağımlılıklarını belirleyemeyebilir. Çalışma kitabı değiştirilmişse, önceki önbellek değeri artık güvenilir kabul edilemez. Bu durumda, desteklenmeyen veri içeren bir hücrenin değerini okumak CellUnsupportedDataException tetikleyebilir.

Grafiğiniz, Aspose.Slides’in değerlendirmediği Excel fonksiyonlarına bağlıysa, bu formülleri bu fonksiyonları destekleyen bir elektronik tablo motoru ile hesaplayın ve elde edilen değerleri grafik çalışma kitabına yazın. Desteklenmeyen formülleri tahmini değerlerle değiştirmeyin.

Formül Hatalarını Ele Alma

Ayırmanız gereken iki farklı problem tipi vardır.

Bir formül geçerli olabilir ancak #DIV/0!, #N/A, #NAME?, #NULL!, #NUM!, #REF! veya #VALUE! gibi bir elektronik tablo hata sonucu üretir. Bu durumda hata belirteci bir hücre sonucu olup ChartDataCell.getValue üzerinden döndürülebilir.

Bir formül ayrıca ayrıştırma, referans, bağımlılık ya da desteklenen veri seviyesinde başarısız olabilir. Aspose.Slides bu durumlar için CellInvalidFormulaException, CellInvalidReferenceException, CellCircularReferenceException ve CellUnsupportedDataException gibi elektronik tablo‑özel istisnalar sağlar.

Formüller şablonlardan veya kullanıcı girdilerinden geldiğinde, yeniden hesaplama ve değer erişimi etrafında bu istisnaları yakalayın:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import CellCircularReferenceException, CellInvalidFormulaException, CellInvalidReferenceException, CellUnsupportedDataException, ChartType, Presentation

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 500, 300)
    workbook = chart.getChartData().getChartDataWorkbook()
    cell = workbook.getCell(0, "A2")
    cell.setFormula("SUM(B2:B5)")

    try:
        workbook.calculateFormulas()
        print(cell.getValue())
    except CellInvalidFormulaException as ex:
        print("Invalid formula: " + str(ex.getMessage()))
    except CellInvalidReferenceException as ex:
        print("Invalid cell reference: " + str(ex.getMessage()))
    except CellCircularReferenceException as ex:
        print("Circular reference: " + str(ex.getMessage()))
    except CellUnsupportedDataException as ex:
        print("Unsupported spreadsheet data: " + str(ex.getMessage()))
finally:
    presentation.dispose()

Pratik Sınırlamalar

Grafik çalışma sayfalarındaki formül desteği, tam Excel uyumluluğu olmayan, tanımlı bir elektronik tablo hesaplama alt kümesi için tasarlanmıştır. Raporlama iş akışınızı tasarlarken şu sınırlamaları aklınızda bulundurun:

  • Aspose.Slides’in formülleri yeniden hesaplamasını istediğinizde yalnızca belgelenen sabitleri, operatörleri, referansları ve fonksiyonları kullanın.
  • Formül sonuçlarının bağımlı olduğu hücreleri değiştirdikten sonra yeniden hesaplayın.
  • Yüklenmiş sunumlardan gelen önbelleğe alınmış değerleri bir anlık görüntü olarak değerlendirin; düzenlemelerden sonra yeniden hesaplamanın yerine kullanmayın.
  • Mevcut şablonlardaki formülleri, belgelenen listenin dışındaki fonksiyonları içeriyorsa, hesaplanan değerlerine güvenmeden önce test edin.
  • Tam bir elektronik tablo hesaplama motoru gerektiren formüller için bunları harici olarak hesaplayın ve ardından grafik çalışma kitabını elde edilen değerlerle güncelleyin.

SSS

ChartDataCell.setFormula ile ChartDataCell.setR1C1Formula arasındaki fark nedir?

ChartDataCell.setFormula B2-C2 gibi bir A1‑stil ifadesi saklar. ChartDataCell.setR1C1Formula RC[-2]-RC[-1] gibi bir R1C1‑stil ifadesi saklar. Formülleri nasıl ürettiğinize veya kopyaladığınıza en uygun gösterimi kullanın.

Hesaplamadan sonra hücreyi mi yoksa değerini mi okumam gerekir?

ChartDataWorkbook.getCell bir ChartDataCell döndürür. Hesaplamadan sonra hesaplanan sonucu almak için o hücrenin ChartDataCell.getValue metodunu çağırın.

ChartDataWorkbook.calculateFormulas ne zaman çağrılmalı?

Giriş değerlerini veya formülleri değiştirdikten ve hesaplanan sonuçlara bağımlı olmadan önce ChartDataWorkbook.calculateFormulas çağırın. Bu, yerleşik değerlendiricinin desteklediği formüllerin değerlerini günceller.

Aspose.Slides her Excel fonksiyonunu destekliyor mu?

Hayır. Yerleşik değerlendirici belgelenen bir fonksiyon alt kümesini destekler. Bu alt kümenin dışındaki fonksiyonların doğru şekilde yeniden hesaplanacağı varsayılmamalıdır. Tam Excel formül uyumluluğu gerekiyorsa, hesaplamayı uygun bir elektronik tablo motoruyla gerçekleştirin ve son değerleri grafik çalışma kitabına yazın.

Yüklenmiş bir sunum desteklenmeyen bir formül içerirse ne olur?

Grafik verisi değişmemişse, çalışma kitabı hâlâ önceki hesaplanmış önbellek değerini içerebilir. İlgili veri değiştirildiğinde bu önbellek değeri geçersiz olabilir. Formülü işlenemeyen bir hücreye erişmek CellUnsupportedDataException tetikleyebilir.

Formül hata değerleri istisna mı?

Hayır. #DIV/0! gibi bir sonuç, geçerli bir hesaplamanın ürettiği bir elektronik tablo değeridir. CellInvalidFormulaException veya CellCircularReferenceException gibi istisnalar, formülün normal olarak işlenemediğini gösterir.

Bir formül hücresi değiştiğinde grafik otomatik olarak güncellenir mi?

Bir grafik serisi çalışma kitabı hücrelerine başvurabilir. Önce çalışma kitabını yeniden hesaplayın, ardından sunumu kaydedin veya render edin. Grafik veri noktaları hesaplanan hücrelere referans veriyorsa, grafik bu güncellenmiş hücre değerlerini kullanır; bu iş akışında ayrı bir grafik‑yenileme yöntemi gerekmez.

Grafikler harici bir Excel çalışma kitabı kullanabilir mi?

Evet, grafik verisi harici bir çalışma kitabı kullanacak şekilde grafik veri API’si aracılığıyla yapılandırılabilir. Bununla birlikte, bu makalede açıklanan formül hesaplama iş akışı grafik veri çalışma kitabı ve Aspose.Slides tarafından değerlendirilen formül alt kümesiyle sınırlıdır. ChartDataWorkbook.calculateFormulas dış bir XLSX dosyasındaki rastgele formüllerin tam yeniden hesaplamasını sağlayacağını varsaymayın.

Başka bir çalışma sayfasına veya çalışma kitabına başvuran formüller kullanabilir miyim?

Excel‑stil başvurular grafik çalışma kitaplarında bulunabilir, ancak formül değerlendirmesi desteklenen ayrıştırıcı ve fonksiyon kümesiyle sınırlıdır. Çapraz‑sayfa veya harici bir referans kritikse, hedef Aspose.Slides sürümünüzde tam olarak test edin. Geniş Excel referans uyumluluğu gerektiren iş akışları için, çalışma kitabını harici olarak hesaplayın ve çözülen değerleri grafik verisine geri yazın.

Formül dizgileri = ile başlamalı mı?

Aspose.Slides API örnekleri B2-C2 veya SUM(B2:B5) gibi ifadeleri baştaki = olmadan atar. Bu biçimi kullanmak, oluşturulan formüllerin belgelenen API örnekleriyle tutarlı kalmasını sağlar.