Diagrammunkalap képletek alkalmazása prezentációkban JavaScript használatával

Áttekintés

A PowerPoint-diagramok általában beágyazott munkalapon tárolják a forrásadatokat. Az Aspose.Slides for Node.js via Java használatával hozzáférhet a munkalaphoz a diagram adatkönyvtárán keresztül, beírhat bemeneti értékeket, képleteket rendelhet cellákhoz, kiszá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épletmunkafolyamatot: diagram létrehozása, a munkalap feltöltése, A1‑stílusú vagy R1C1‑stílusú képletek hozzárendelése, azok újraszámítása, a kiszámított értékek kiolvasása, a cellák összekapcsolása egy diagram sorozattal, és a prezentáció mentése. Leírja továbbá a támogatott képlet szintaxist, a beépített függvények részhalmazát, a gyorsítótárazott értékeket, a nem támogatott képleteket és a táblázatspecifikus hibákat.

Diagram munkalapok és képletek

Egy diagram munkalapja tartalmazza a kategóriákat, a sorozatneveket és az értékeket, amelyeket a diagram használ. PowerPointban a munkalapot a diagram adat-szerkesztő megnyitásával ellenőrizheti:

PowerPoint-diagram beágyazott munkalappal, kategória- és sorozatadatok megjelenítése

Az Aspose.Slides-ben a munkalapot a ChartDataWorkbook osztály exponálja. A1‑stílusú képletekhez használja a ChartDataCell.setFormula metódust, R1C1‑stílusú képletekhez a ChartDataCell.setR1C1Formula metódust. Bemeneti cellák vagy képletek módosítása után hívja meg a ChartDataWorkbook.calculateFormulas metódust a támogatott képletek újraszámításához és a cellaértékek frissítéséhez.

Egy kiszámított cella továbbra is a ChartDataCell.getValue metódussal adja vissza az eredményt. Ez akkor fontos, amikor a kódban meg kell vizsgálnia a képlet eredményét, vagy a cellát diagramadatként akarja használni.

Diagram létrehozása és munkalap képletek kiszámítása

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

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);
    const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 600, 350);
    const workbook = chart.getChartData().getChartDataWorkbook();
    const worksheetIndex = 0;

    chart.getChartData().getSeries().clear();
    chart.getChartData().getCategories().clear();
    workbook.clear(worksheetIndex);

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

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

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

    const profit1 = workbook.getCell(worksheetIndex, "D2");
    const profit2 = workbook.getCell(worksheetIndex, "D3");
    const profit3 = workbook.getCell(worksheetIndex, "D4");

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

    workbook.calculateFormulas();

    const q1Profit = profit1.getValue(); // 40
    const q2Profit = profit2.getValue(); // 55
    const q3Profit = profit3.getValue(); // 25

    console.log("Q1 profit: " + q1Profit);
    console.log("Q2 profit: " + q2Profit);
    console.log("Q3 profit: " + q3Profit);

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

    const profitSeries = chart.getChartData().getSeries().add(workbook.getCell(worksheetIndex, "D1"), chart.getType());
    profitSeries.getDataPoints().addDataPointForBarSeries(profit1);
    profitSeries.getDataPoints().addDataPointForBarSeries(profit2);
    profitSeries.getDataPoints().addDataPointForBarSeries(profit3);
    profitSeries.getLabels().getDefaultDataLabelFormat().setShowValue(true);

    presentation.save("chart-formulas.pptx", aspose.slides.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ó betűkkel jelöli az oszlopokat, számokkal a sorokat. A ChartDataCell.setFormula metódussal adhat meg A1‑stílusú kifejezéseket.

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);
    const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 500, 300);
    const 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);

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

    workbook.calculateFormulas();

    const value = cell.getValue(); // 19
} finally {
    presentation.dispose();
}

Az általános A1 hivatkozási formák:

Hivatkozás Relatív Abszolút Vegyes
Cell A2 $A$2 A$2, $A2
Row 2:2 $2:$2
Column A:A $A:$A
Range A2:C4 $A$2:$C$4 A$2:$C4, $A2:C$4

A relatív hivatkozások megváltozhatnak, ha a képletet egy táblázatkezelő áthelyezi vagy másolja. Az abszolút hivatkozások mindkét koordinátát rögzítik, a vegyes hivatkozások csak egy sor vagy egy oszlop rögzítését végzik.

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

Az R1C1 notáció mind a sorokat, mind az oszlopokat numerikusan jelöli. Relatív hivatkozások a szögletes zárójelekben megadott eltolásokat használják. Ezt a szintaxist a ChartDataCell.setR1C1Formula metódussal adhatja meg.

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);
    const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 500, 300);
    const workbook = chart.getChartData().getChartDataWorkbook();

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

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

    workbook.calculateFormulas();

    const value = cell.getValue(); // 7
} finally {
    presentation.dispose();
}

Az általános R1C1 hivatkozási formák:

Hivatkozás Relatív Abszolút Vegyes
Cell R[2]C[3] R2C3 R2C[3], R[2]C3
Row R[2] R2
Column C[3] C3
Range 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 a RC[-2] a sorban két oszloppal balra lévő cellát jelenti (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ázathibá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, például A2=TRUE.
Numerikus 1, 0.5, .3, 1E-2 A közös és tudományos jelölés is támogatott.
Szöveg "abc", "2/3/2020 12:00" A szövegliterálokat dupla idézőjelek közé kell tenni a képletben.
Hiba eredmény #DIV/0!, #N/A, #REF! Egy érvényes képlet a táblázat hibaértékére is kiértékelődhet a normál eredmény helyett.

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

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);
    const chart = slide.getShapes().addChart(aspose.slides.ChartType.ClusteredColumn, 50, 50, 500, 300);
    const 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();

    const logicalValue = workbook.getCell(0, "B2").getValue(); // hamis
    const numericValue = workbook.getCell(0, "C2").getValue(); // 1.5
    const scientificValue = workbook.getCell(0, "D2").getValue(); // 0.003
    const stringValue = workbook.getCell(0, "E2").getValue(); // abc
    const errorValue = workbook.getCell(0, "F2").getValue(); // #DIV/0!
} finally {
    presentation.dispose();
}

Aritmetikai operátorok

Operátor Jelentés Példa
+ Összeadás vagy egyelőleg pozitív előjel 2+3
- Kivonás vagy negatív előjel 2-3, -3
* Szorzás 2*3
/ Osztás 2/3
% Százalék 30%
^ Hatványozás 2^3

Használjon zárójeleket a kiértékelési sorrend egyértelműsítéséhez, például (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 előre definiált függvények

Az Aspose.Slides beépített képletértékelőt biztosít a diagram munkalapokhoz, de nem egy teljes Excel számítási motor. A dokumentált függvénykészlet csak az alábbiakra korlátozódik. Ne feltételezze, hogy tetszőleges Excel‑függvényt újraszámol a ChartDataWorkbook.calculateFormulas metódus.

Függvény Cél 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 a 1900-as dátumrendszerrel DATE(2026,8,19)
DAYS Napok száma két dátum között DAYS(B2,A2)
FIND Szövegrész 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 Referencia forma INDEX(A2:C4,2,3)
LOOKUP Vektor forma LOOKUP(A2,B2:B5,C2:C5)
MATCH Vektor forma MATCH(A2,B2:B5,0)
MAX Maximális é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 van dokumentálva, míg a LOOKUP és MATCH vektor formában. A DATE a 1900-as dátumrendszert használja. A nem felsorolt funkciókat az Aspose.Slides képletértékelője nem támogatja, kivéve ha külön dokumentálva vannak.

Képletek számítása preferált kultúrával

Egyes munkafüzet‑függvények a szöveget kultúraspecifikus szabályok szerint értelmezik. Ez különösen fontos a kétsávos karakterkészletet (DBCS) használó nyelvek esetén. Az ilyen képletek helyes számítá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ázat‑opciókat a LoadOptions.setSpreadsheetOptions metódussal, majd töltse be a prezentációt.

Az alábbi példa japán kultúrát választ, megnyit egy prezentációt a konfigurált betöltési opciókkal, és minden diagram munkafüzethez meghívja a ChartDataWorkbook.calculateFormulas metódust:

const aspose = {};
aspose.slides = require("aspose.slides.via.java");
const java = require("java");

const japaneseCulture = java.newInstanceSync("java.util.Locale", "ja", "JP");

const spreadsheetOptions = new aspose.slides.SpreadsheetOptions();
spreadsheetOptions.setPreferredCulture(japaneseCulture);

const loadOptions = new aspose.slides.LoadOptions();
loadOptions.setSpreadsheetOptions(spreadsheetOptions);

const presentation = new aspose.slides.Presentation("presentation.pptx", loadOptions);
try {
    const slides = presentation.getSlides();
    for (let slideIndex = 0; slideIndex < slides.size(); slideIndex++) {
        const shapes = slides.get_Item(slideIndex).getShapes();
        for (let shapeIndex = 0; shapeIndex < shapes.size(); shapeIndex++) {
            const shape = shapes.get_Item(shapeIndex);
            if (java.instanceOf(shape, "com.aspose.slides.IChart")) {
                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 adja meg. A munkafüzet‑képletek által elvárt kultúrát használja; például a japán DBCS számítási szabályokat követő képletekhez a ja-JP kultúrát adja meg.

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

A táblázatfájlok gyakran tárolják a képletet és annak legutóbb számított értékét is. Az Aspose.Slides ezért a ChartDataCell.getValue metódussal is ki tud olvasni egy gyorsítótárazott értéket, amikor a prezentáció betöltődik, és a diagramadatok nem változtak.

Bemeneti cellák vagy képletek módosítása után ne bízzon egy régi gyorsítótárazott eredményben. Hívja meg a ChartDataWorkbook.calculateFormulas metódust, mielőtt a kiszámított értékeket olvasná vagy olyan diagramadatot mentene, amely ezekre támaszkodik.

A nem támogatott 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 egy nem támogatott adattal rendelkező cella kiolvasása a CellUnsupportedDataException kivételt válthatja ki.

Ha diagramja olyan Excel‑függvényeket használ, amelyeket az Aspose.Slides nem számol ki, számolja ki ezeket a képleteket egy olyan táblázatmotorral, amely támogatja őket, 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ét különböző problémafajtát kell megkülönböztetni.

Egy képlet lehet érvényes, de táblázathiba eredményt ad, például #DIV/0!, #N/A, #NAME?, #NULL!, #NUM!, #REF! vagy #VALUE!. Ebben az esetben a hibajelent 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 támogatott adat szintjén is hibát eredményezhet. Az Aspose.Slides ezekre a helyzetekre táblázatspecifikus kivételeket biztosít: CellInvalidFormulaException, CellInvalidReferenceException, CellCircularReferenceException és CellUnsupportedDataException.

Sablonokból vagy felhasználói bemenetből származó képletek esetén fogjon hibákat az újraszámítás és az értékelérés körül. A hiba részletei az alapszakasz táblázati problémáját azonosítják:

const aspose = {};
aspose.slides = require("aspose.slides.via.java");

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

    try {
        workbook.calculateFormulas();
        console.log(cell.getValue());
    } catch (error) {
        console.error("Formula processing error: " + error.message);
    }
} finally {
    presentation.dispose();
}

Gyakorlati korlátok

A diagram munkalapokban nyújtott képlet‑támogatás egy meghatározott részhalmazra van tervezve, és nem biztosít teljes Excel‑kompatibilitást. Tartsa szem előtt ezeket a korlátozásokat a jelentéskészítési munkafolyamatok tervezésekor:

  • Csak a dokumentált állandókat, operátorokat, hivatkozásokat és függvényeket használja, ha azt szeretné, hogy az Aspose.Slides újraszámolja a képleteket.
  • Számolja újra a munkafüzetet a képlet‑eredményektől függő cellák módosítása után.
  • Tekintse a betöltött prezentációkból származó gyorsítótárazott értékeket pillanatfelvételeknek, ne pedig az utólagos szerkesztés utáni újraszámítás helyettesítőjének.
  • Tesztelje a meglévő sablonokból származó képleteket, mielőtt a kiszámított értékekre támaszkodna, különösen akkor, ha olyan függvényeket használnak, amelyek nincsenek a dokumentált listában.
  • Azokhoz a képletekhez, amelyek teljes táblázat‑számítási motorra van szükségük, végezze el a számítást külsőleg, majd frissítse a diagram munkafüzetet a kapott értékekkel.

GYIK

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

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

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

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 meg 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ényeket felhasználná. 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ő csak egy dokumentált függvény‑részhalmazt támogat. A részhalmazon kívül eső függvényekre ne számítson, hogy helyesen újraszámolódnak. Ha teljes Excel‑képlet‑kompatibilitásra van szükség, végezze el a számítást egy megfelelő táblázat‑motorral, és írja a végső értékeket a diagram munkafüzetbe.

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

Ha a diagramadatok nem változtak, a munkafüzet még tartalmazhat egy korábban kiszámolt 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 lehet érvényes. Egy olyan cella elérése, amelynek képletét nem tudja kezelni, a CellUnsupportedDataException kivételt váltja ki.

Ugyanazok-e a képlet‑hibaértékek és a kivételek?

Nem. A #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ál módon feldolgozni.

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

Egy diagram sorozata hivatkozhat munkafüzet‑cellákra. 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 hivatkoznak, a diagram az ezekkel frissített értékeket használja; nincs szükség külön diagram‑frissítési metódusra ebben a munkafolyamatban.

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

Igen, a diagramadatok konfigurálhatók úgy, hogy egy külső munkafüzetet használjanak a diagramadat‑API‑n keresztül. Azonban a jelen cikkben leírt képlet‑számítási munkafolyamat a diagram adat‑munkafüzetre é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 végez tetszőleges képleteken egy külső XLSX fájlban.

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

Excel‑stílusú hivatkozások előfordulhatnak diagram munkafüzetekben, de a képletszámítá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, hogy a pontos képlet működik‑e a cél Aspose.Slides verziójával. Széles körű Excel‑hivatkozási kompatibilitást igénylő munkafolyamatokhoz számolja ki a munkafüzetet külsőleg, és írja vissza a feloldott értékeket a diagram adatba.

Kell‑e egy képletszövegnek = jellel kezdődnie?

Az Aspose.Slides API‑példák a B2-C2 vagy SUM(B2:B5) kifejezéseket vezeték‑karakter nélkül adják meg. Ilyen formát használva a generált képletek összhangban lesznek a dokumentált API‑példákkal.