Munkalap képletek alkalmazása diagramokhoz prezentációkban Python via Java

Áttekintés

A PowerPoint-diagramok általában a forrásadataikat egy beágyazott munkalapon tárolják. Az Aspose.Slides for Python via Java segítségével elérhető ez a munkalap a diagram adatkönyvtárán keresztül, beírhatja a bemeneti értékeket, képleteket adhat cellákhoz, számíthatja a támogatott képleteket, és a kiszámított cellákat diagramadatként használhatja.

Ez a cikk bemutatja a teljes képlet-munkafolyamatot: diagram létrehozása, annak munkalapjának feltöltése, A1‑stílusú vagy R1C1‑stílusú képletek hozzárendelése, újraszámítása, a kiszámított értékek kiolvasása, a cellák diagram‐sorozathoz kapcsolása, és a prezentáció mentése. Továbbá ismerteti a támogatott képletszintaxist, a beépített függvényrészletet, a gyorsítótárazott értékeket, a nem támogatott képleteket és a táblázat‑specifikus hibákat.

Diagrammunkalapok és képletek

Egy diagrammunkalap tartalmazza a kategóriákat, sorozatneveket és értékeket, amelyeket a diagram használ. PowerPointban a munkalapot a diagram adatkezelő szerkesztőjének megnyitásával vizsgálhatja meg:

PowerPoint diagram a beágyazott munkalappal nyitva, kategória‑ és sorozatadatok mutatva

Az Aspose.Slides-ban a munkalap a ChartDataWorkbook osztályon keresztül érhető el. A‑1‑stílusú képletekhez használja a ChartDataCell.setFormula metódust, a R1C1‑stílusúakhoz a ChartDataCell.setR1C1Formula metódust. A bemeneti cellák vagy képletek módosítása után hívja a ChartDataWorkbook.calculateFormulas metódust a támogatott képletek újraszámításához és a megfelelő cellaértékek frissítéséhez.

Egy kiszámított cella az eredményét továbbra is a ChartDataCell.getValue metódussal adja vissza. Ez fontos, ha a kódon belül képlet‑eredményt kell ellenőrizni vagy a cellát diagramadat‑pontként használni.

Diagram létrehozása és a munkalap képleteinek számítása

Az alábbi példa egy végponttól‑végpontig tartó munkafolyamatot mutat be. Létrehoz egy csoportosított oszlopdiagramot, törli a mintaadatokat, beírja a negyedéves bevétel‑ és kiadásértékeket, képletekkel kiszámolja a profitot, kiolvassa az eredményeket, a kiszámított cellákat diagramértékként használja, és menti a prezentációt.

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()

A diagram adatpontjai a D2:D4 tartományra hivatkoznak, így a diagram a kiszámított profitértékeket használja. Ebben a munkafolyamatban nincs külön diagram‑frissítési hívás: először számolja újra a munkafüzetet, majd használja vagy mentse a számított cellákra mutató diagramadatokat.

A1‑stílusú képletek használata

Az A1‑notáció a oszlopokat betűkkel, a sorokat számokkal jelöli. A‑1‑stílusú kifejezéseket a ChartDataCell.setFormula metódus segítségével adhatja meg.

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()

Gyakori A1 hivatkozási formák:

Hivatkozás Relatív Abszolút Vegyes
Cella A2 $A$2 A$2, $A2
Sor 2:2 $2:$2
Oszlop A:A $A:$A
Tartomány A2:C4 $A$2:$C$4 A$2:$C4, $A2:C$4

A relatív hivatkozások megváltozhatnak, ha egy képletet egy táblázatkezelő alkalmazás áthelyez vagy másol. Az abszolút hivatkozások mindkét koordinátát rögzítik, míg a vegyes hivatkozások csak egy sort vagy egy oszlopot rögzítenek.

R1C1‑stílusú képletek használata

Az R1C1‑notáció sorokat és oszlopokat is számmal jelöli. A relatív hivatkozások négyzetes zárójelekben lévő eltolásokat használnak. Ezt a szintaxist a ChartDataCell.setR1C1Formula metódussal adhatja meg.

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()

Gyakori R1C1 hivatkozási formák:

Hivatkozás Relatív Abszolút Vegyes
Cella R[2]C[3] R2C3 R2C[3], R[2]C3
Sor R[2] R2
Oszlop C[3] C3
Tartomány R[2]C[3]:R[5]C[7] R2C3:R5C7 R2C3:R[5]C[7], R[2]C3:R5C[7]

Például a D2 cellában az RC[-2] azt jelenti, hogy a ugyanabban a sorban két oszloppal balra lévő cella (B2).

Képlet‑állandók és operátorok

A beépített képlet‑értékelő logikai értékeket, numerikus literálokat, szövegeket, táblázat‑hibákat, aritmetikai operátorokat és összehasonlító operátorokat támogat.

Állandók és literálok

Típus Példák Megjegyzés
Logikai TRUE, FALSE Közvetlenül használható logikai kifejezésekben, pl. A2=TRUE.
Numerikus 1, 0.5, .3, 1E-2 A közönséges és tudományos jelölés egyaránt támogatott.
Szöveg "abc", "2/3/2020 12:00" Szövegliterálok dupla idézőjelek között szerepelnek a képleten belül.
Hibás eredmény #DIV/0!, #N/A, #REF! Egy érvényes képlet visszaadhat táblázat‑hibát a normál eredmény helyett.

Ez a példa több állandótípust használ:

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, "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() # Hamis
    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()

Aritmetikai operátorok

Operátor Jelentés Példa
+ Összeadás vagy egyértelmű plusz 2+3
- Kivonás vagy negáció 2-3, -3
* Szorzás 2*3
/ Osztás 2/3
% Százalék 30%
^ Hatványozás 2^3

A kiértékelési sorrend egyértelművé tételéhez használjon zárójeleket, pl. (A2+B2)*C2.

Összehasonlító operátorok

Az összehasonlító kifejezések logikai értéket adnak vissza.

Operátor Jelentés Példa
= Egyenlő A2=3
<> Nem egyenlő A2<>3
> Nagyobb A2>3
>= Nagyobb vagy egyenlő A2>=3
< Kisebb A2<3
<= Kisebb vagy egyenlő A2<=3

Támogatott beépített függvények

Az Aspose.Slides beépített képlet‑értékelője diagrammunkalapokra vonatkozik, de nem egy teljes Excel‑számítási motor. A dokumentált függvénykészlet az alábbiakra korlátozódik. Ne tételezze, hogy bármely Excel‑függvény újraszámítható a ChartDataWorkbook.calculateFormulas metódussal.

Függvény Célt vagy támogatott forma Példa
ABS Abszolút érték ABS(A2)
AVERAGE Aritmetikai közép AVERAGE(B2:B5)
CEILING Felfelé kerekítés egy többszörösre CEILING(A2,5)
CHOOSE Érték kiválasztása index alapján CHOOSE(A2,"Low","High")
CONCAT Szövegek összefűzése CONCAT(A2,B2)
CONCATENATE Szövegek összefűzése CONCATENATE(A2," ",B2)
DATE Dátumérték létrehozása 1900‑as dátumrendszerrel DATE(2026,8,19)
DAYS Napok száma két dátum között DAYS(B2,A2)
FIND Szöveg keresése egy másikban FIND("-",A2)
FINDB Byte‑orientált szövegkeresés FINDB("a",A2)
IF Feltételes eredmény IF(A2>0,A2,0)
INDEX Hivatkozási forma INDEX(A2:C4,2,3)
LOOKUP Vektoralapú forma LOOKUP(A2,B2:B5,C2:C5)
MATCH Vektoralapú forma MATCH(A2,B2:B5,0)
MAX Legnagyobb érték MAX(B2:B5)
SUM Összeg SUM(B2:B5)
VLOOKUP Függőleges keresés VLOOKUP(A2,B2:D10,3,FALSE)

A táblázatban szereplő korlátozások jelentősek: az INDEX referencia‑formában, míg a LOOKUP és MATCH vektoralapú formában van dokumentálva. A DATE a 1900‑as dátumrendszert használja. Az itt felsorolatlan funkciók és jellemzők a beépített értékelő számára nem támogatottak, hacsak másként nincsenek dokumentálva.

Képletek számítása előnyben részesített kultúrával

Bizonyos munkafüzet‑függvények a szöveget a kultúra‑specifikus szabályok szerint értelmezik. Ez különösen fontos a kétsoros karakterkészleteket (DBCS) használó nyelvek esetén. Az ilyen képletek helyes számlálásához hozza létre a LoadOptions objektumot, állítsa be a preferált kultúrát a SpreadsheetOptions.setPreferredCulture metódussal, adja át a táblázati beállításokat a LoadOptions.setSpreadsheetOptions metódussal, majd töltse be a prezentációt.

Az alábbi példa a japán kultúrát választja, megnyit egy prezentációt a konfigurált betöltési beállításokkal, és minden diagrammunkafüzeten meghívja a ChartDataWorkbook.calculateFormulas metódust:

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()

A preferált kultúra a prezentáció betöltési konfigurációjának része, ezért a Presentation példány létrehozása előtt kell megadni. Használja azt a kultúrát, amelyet a munkafüzet‑képletek elvárnak; például a japán DBCS szabályokhoz a ja-JP kódot kell megadni.

Újraszámítás és gyorsítótárazott értékek

A táblázatfájlok gyakran tárolják a képletet és az utolsó kiszámított értéket is. Az Aspose.Slides ezért képes a ChartDataCell.getValue metódussal egy gyorsítótárazott értéket beolvasni, amikor a prezentáció betöltődik, és a vonatkozó diagramadatok nem változtak.

A bemeneti cellák vagy képletek módosítása után ne támaszkodjon egy régi gyorsítótárazott eredményre. Hívja a ChartDataWorkbook.calculateFormulas metódust a kiszámított értékek kiolvasása vagy a diagramadatok mentése előtt, amelyek ezekre támaszkodnak.

A támogatott halmazon kívüli képletek esetén az Aspose.Slides előfordulhat, hogy nem tudja értelmezni a képletet vagy annak függőségeit. Ha a munkafüzet módosult, a korábbi gyorsítótárazott érték már nem tekinthető megbízhatónak. Ilyen helyzetben a nem támogatott adatokkal rendelkező cella kiolvasása a CellUnsupportedDataException kivételt váltja ki.

Ha a diagram olyan Excel‑függvényeket használ, amelyeket az Aspose.Slides nem képes kiértékelni, számítsa ki ezeket a képleteket egy, a szükséges függvényeket támogató táblázat‑motorral, majd írja vissza a kapott értékeket a diagram munkafüzetébe. Ne helyettesítse a nem támogatott képleteket tippelt értékekkel.

Képlethibák kezelése

Kétféle problémát kell megkülönböztetni.

Egy képlet érvényes lehet, de táblázat‑hibát eredményezhet, például #DIV/0!, #N/A, #NAME?, #NULL!, #NUM!, #REF! vagy #VALUE!. Ebben az esetben a hibajelzés a cella eredménye, és a ChartDataCell.getValue metódussal adható vissza.

Egy képlet a feldolgozás, hivatkozás, függőség vagy a támogatott‑adat szintjén is hibát okozhat. Az Aspose.Slides ezekhez a helyzetekhez táblázat‑specifikus kivételeket biztosít: CellInvalidFormulaException, CellInvalidReferenceException, CellCircularReferenceException és CellUnsupportedDataException.

Ha a képletek sablonokból vagy felhasználói bemenetből származnak, kezelje ezeket a kivételeket az újraszámítás és az érték hozzáférés körül:

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()

Gyakorlati korlátok

A diagrammunkalapok képlet‑támogatása egy meghatározott táblázatszámítási részhalmazra van tervezve, nem pedig teljes Excel‑kompatibilitásra. Tartsa szem előtt ezeket a korlátozásokat a jelentéskészítési munkafolyamat tervezésekor:

  • Csak a dokumentált állandókat, operátorokat, hivatkozásokat és függvényeket használja, ha az Aspose.Slides-nak kell újraszámítania a képleteket.
  • Újraszámítás a cellák módosítása után, amelyektől a képlet‑eredmények függenek.
  • A betöltött prezentációkból származó gyorsítótárazott értékek pillanatképek, nem helyettesítik a szerkesztés utáni újraszámítást.
  • Tesztelje a meglévő sablonokból származó képleteket, mielőtt a kiszámított értékekre támaszkodna, különösen, ha a dokumentált listán kívüli függvényeket használnak.
  • A teljes táblázatszámítási motorra igénylő képletek esetén számítsa ki őket külsőleg, majd frissítse a diagram munkafüzetét a kapott értékekkel.

GYIK

Mi a különbség a ChartDataCell.setFormula és a ChartDataCell.setR1C1Formula között?

A ChartDataCell.setFormula A1‑stílusú kifejezést tárol, például B2-C2. A ChartDataCell.setR1C1Formula R1C1‑stílusú kifejezést tárol, például RC[-2]-RC[-1]. Használja azt a jelölést, amely legjobban illik a képletek generálásához vagy másolásához.

Olvasnom kell a cellát magát vagy az értékét a számítás után?

A ChartDataWorkbook.getCell egy ChartDataCell objektumot ad vissza. A kiszámított eredményhez hívja meg ennek a cellának a ChartDataCell.getValue metódusát újraszámítás után.

Mikor kell meghívni a ChartDataWorkbook.calculateFormulas metódust?

Hívja a ChartDataWorkbook.calculateFormulas metódust a bemeneti értékek vagy képletek módosítása után, és mielőtt a kiszámított eredményektől függne. Ez frissíti a beépített értékelő által támogatott képletek értékeit.

Az Aspose.Slides támogat minden Excel‑függvényt?

Nem. A beépített értékelő egy dokumentált függvény‑részhalmazt támogat. A részhalmazon kívüli függvények nem számíthatók újra helyesen. Ha teljes Excel‑képlet‑kompatibilitásra van szükség, végezze a számítást egy megfelelő táblázat‑motorral, és írja a végső értékeket a diagram munkafüzetébe.

Mi történik, ha egy betöltött prezentáció nem támogatott képletet tartalmaz?

Ha a diagram adat nem változott, a munkafüzet még tartalmazhat egy korábban kiszámított gyorsítótárazott értéket. A kapcsolódó adatok módosítása után ez a gyorsítótárazott érték már nem biztos, hogy érvényes. Egy nem kezelhető képlettel rendelkező cella elérése a CellUnsupportedDataException kivételt váltja ki.

Ugyanazok-e a képlet‑hibák és a kivételek?

Nem. Az #DIV/0!‑hez hasonló eredmény egy táblázat‑érték, amely egy érvényes számításból származik. A CellInvalidFormulaException vagy CellCircularReferenceException kivételek azt jelzik, hogy a képletet nem lehet normálisan feldolgozni.

A diagram automatikusan frissül, ha egy képlet‑cellát módosítanak?

Egy diagram sorozat hivatkozhat a munkafüzet celláira. Először számolja újra a munkafüzetet, majd mentse vagy renderelje a prezentációt. Ha a diagram adatpontjai a kiszámított cellákra mutatnak, a diagram a frissített cellaértékeket használja; ehhez nincs külön diagram‑frissítési metódus szükséges.

Használhatók külső Excel‑munkafüzetek a diagramokban?

Igen, a diagramadatok konfigurálhatók külső munkafüzet használatára a diagram adat‑API‑val. Azonban ebben a cikkben leírt képletszámítási munkafolyamat a diagram adatkönyvtárra és az Aspose.Slides által kiértékelt képlet‑részhalmazra vonatkozik. Ne feltételezze, hogy a ChartDataWorkbook.calculateFormulas teljes újraszámítást biztosít egy tetszőleges külső XLSX fájlra.

Használhatók képletek, amelyek egy másik munkalapra vagy munkafüzetre hivatkoznak?

Excel‑stílusú hivatkozások előfordulhatnak a diagram munkafüzeteiben, de a képlet‑értékelés a támogatott elemző és függvénykészlet által korlátozott. Ha egy kereszt‑lap vagy külső hivatkozás elengedhetetlen, ellenőrizze a pontos képletet a használt Aspose.Slides verzióval. Olyan munkafolyamatok esetén, amelyek széles Excel‑hivatkozási kompatibilitást igényelnek, számítsa ki a munkafüzetet külsőleg, majd írja vissza a feloldott értékeket a diagram adatainak.

A képletsorozatoknak kell = jellel kezdődniük?

Az Aspose.Slides API példák a kifejezéseket B2-C2 vagy SUM(B2:B5) formában adják meg, vezető = nélkül. Ennek a formának a használata konzisztens a dokumentált API‑példákkal.