Použití vzorců listu grafu v prezentacích pomocí Pythonu
Přehled
Grafy v PowerPointu obvykle ukládají svá zdrojová data do vloženého listu. V Aspose.Slides pro Python prostřednictvím .NET můžete k tomuto listu přistupovat přes sešit dat grafu, zapisovat vstupní hodnoty, přiřazovat buňkám vzorce, vypočítávat podporované vzorce a používat vypočítané buňky jako data grafu.
Tento článek popisuje kompletní workflow vzorců: vytvoření grafu, naplnění jeho listu, přiřazení vzorců ve stylu A1 nebo R1C1, jejich přepočet, čtení vypočítaných hodnot, propojení těchto buněk s řadou grafu a uložení prezentace. Také popisuje podporovanou syntaxi vzorců, podmnožinu vestavěných funkcí, uložené hodnoty, nepodporované vzorce a chyby specifické pro tabulky.
Listy grafů a vzorce
List grafu obsahuje kategorie, názvy řad a hodnoty použité v grafu. V PowerPointu můžete list prohlédnout otevřením editoru dat grafu:

V Aspose.Slides je list vystaven přes sešit dat grafu. Pro vzorce ve stylu A1 použijte vlastnost formula a pro vzorce ve stylu R1C1 vlastnost r1c1_formula. Po změně vstupních buněk nebo vzorců zavolejte calculate_formulas pro přepočet podporovaných vzorců a aktualizaci odpovídajících hodnot buněk.
Vypočítaná buňka stále poskytuje svůj výsledek přes vlastnost value. To je důležité, když potřebujete v kódu zkontrolovat výsledek vzorce nebo použít buňku jako bod dat grafu.
Vytvoření grafu a výpočet vzorců v listu
Následující příklad ukazuje kompletní workflow. Vytvoří sloupcový seskupený graf, vymaže ukázková data, zapíše čtvrtletní příjmy a výdaje, vypočítá zisk pomocí vzorců, přečte výsledky, použije vypočítané buňky jako hodnoty grafu a uloží prezentaci.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 600, 350)
workbook = chart.chart_data.chart_data_workbook
worksheet_index = 0
chart.chart_data.series.clear()
chart.chart_data.categories.clear()
workbook.clear(worksheet_index)
category1 = workbook.get_cell(worksheet_index, "A2", "Q1")
category2 = workbook.get_cell(worksheet_index, "A3", "Q2")
category3 = workbook.get_cell(worksheet_index, "A4", "Q3")
workbook.get_cell(worksheet_index, "B1", "Revenue")
workbook.get_cell(worksheet_index, "C1", "Expenses")
workbook.get_cell(worksheet_index, "D1", "Profit")
workbook.get_cell(worksheet_index, "B2").value = 120.0
workbook.get_cell(worksheet_index, "C2").value = 80.0
workbook.get_cell(worksheet_index, "B3").value = 150.0
workbook.get_cell(worksheet_index, "C3").value = 95.0
workbook.get_cell(worksheet_index, "B4").value = 135.0
workbook.get_cell(worksheet_index, "C4").value = 110.0
profit1 = workbook.get_cell(worksheet_index, "D2")
profit2 = workbook.get_cell(worksheet_index, "D3")
profit3 = workbook.get_cell(worksheet_index, "D4")
profit1.formula = "B2-C2"
profit2.formula = "B3-C3"
profit3.formula = "B4-C4"
workbook.calculate_formulas()
q1_profit = profit1.value # 40
q2_profit = profit2.value # 55
q3_profit = profit3.value # 25
print(f"Q1 profit: {q1_profit}")
print(f"Q2 profit: {q2_profit}")
print(f"Q3 profit: {q3_profit}")
chart.chart_data.categories.add(category1)
chart.chart_data.categories.add(category2)
chart.chart_data.categories.add(category3)
profit_series = chart.chart_data.series.add(workbook.get_cell(worksheet_index, "D1"), chart.type)
profit_series.data_points.add_data_point_for_bar_series(profit1)
profit_series.data_points.add_data_point_for_bar_series(profit2)
profit_series.data_points.add_data_point_for_bar_series(profit3)
profit_series.labels.default_data_label_format.show_value = True
presentation.save("chart-formulas.pptx", slides.export.SaveFormat.PPTX)
Body dat grafu odkazují na D2:D4, takže graf používá vypočítané hodnoty zisku. V tomto workflow není samostatné volání pro obnovení grafu: nejprve přepočtěte sešit, poté použijte nebo uložte data grafu odkazující na vypočítané buňky.
Použití vzorců ve stylu A1
Notace A1 identifikuje sloupce písmeny a řádky čísly. Přiřaďte výrazy ve stylu A1 pomocí IChartDataCell.formula.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 300)
workbook = chart.chart_data.chart_data_workbook
workbook.get_cell(0, "C3").value = 10
workbook.get_cell(0, "F2").value = 2
workbook.get_cell(0, "G2").value = 3
workbook.get_cell(0, "H2").value = 4
cell = workbook.get_cell(0, "A2")
cell.formula = "C3+SUM(F2:H2)"
workbook.calculate_formulas()
value = cell.value # 19
Běžné formy odkazů A1 jsou:
| Odkaz | Relativní | Absolutní | Smíšený |
|---|---|---|---|
| Buňka | A2 |
$A$2 |
A$2, $A2 |
| Řádek | 2:2 |
$2:$2 |
— |
| Sloupec | A:A |
$A:$A |
— |
| Rozsah | A2:C4 |
$A$2:$C$4 |
A$2:$C4, $A2:C$4 |
Relativní odkazy se mohou změnit, když je vzorec přesunut nebo zkopírován tabulkovým programem. Absolutní odkazy fixují oba souřadnice, zatímco smíšené odkazy fixují pouze řádek nebo sloupec.
Použití vzorců ve stylu R1C1
Notace R1C1 identifikuje jak řádky, tak sloupce číselně. Relativní odkazy používají posuny v hranatých závorkách. Tuto syntaxi přiřaďte pomocí IChartDataCell.r1c1_formula.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 300)
workbook = chart.chart_data.chart_data_workbook
workbook.get_cell(0, "B2").value = 12
workbook.get_cell(0, "C2").value = 5
cell = workbook.get_cell(0, "D2")
cell.r1c1_formula = "RC[-2]-RC[-1]"
workbook.calculate_formulas()
value = cell.value # 7
Běžné formy odkazů R1C1 jsou:
| Odkaz | Relativní | Absolutní | Smíšený |
|---|---|---|---|
| Buňka | R[2]C[3] |
R2C3 |
R2C[3], R[2]C3 |
| Řádek | R[2] |
R2 |
— |
| Sloupec | C[3] |
C3 |
— |
| Rozsah | R[2]C[3]:R[5]C[7] |
R2C3:R5C7 |
R2C3:R[5]C[7], R[2]C3:R5C[7] |
Například v buňce D2 znamená RC[-2] buňku ve stejném řádku dvě sloupce vlevo (B2).
Konstanty a operátory ve vzorcích
Vestavěný vyhodnocovač vzorců podporuje logické hodnoty, číselné literály, řetězce, chybové hodnoty tabulek, aritmetické operátory a operátory porovnání.
Konstanty a literály
| Typ | Příklady | Poznámky |
|---|---|---|
| Logický | TRUE, FALSE |
Lze použít přímo v logických výrazech, např. A2=TRUE. |
| Číselný | 1, 0.5, .3, 1E-2 |
Jsou podporovány běžná i vědecká zápisy. |
| Řetězec | "abc", "2/3/2020 12:00" |
Textové literály jsou ve vzorci uzavřeny do dvojitých uvozovek. |
| Chyba | #DIV/0!, #N/A, #REF! |
Platný vzorec může vyhodnotit chybu tabulky místo normálního výsledku. |
Tento příklad používá několik typů konstant:
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 300)
workbook = chart.chart_data.chart_data_workbook
workbook.get_cell(0, "A2").value = False
workbook.get_cell(0, "B2").formula = "A2=TRUE"
workbook.get_cell(0, "C2").formula = "1+0.5"
workbook.get_cell(0, "D2").formula = ".3*1E-2"
workbook.get_cell(0, "E2").formula = "\"abc\""
workbook.get_cell(0, "F2").formula = "2/0"
workbook.calculate_formulas()
logical_value = workbook.get_cell(0, "B2").value # False
numeric_value = workbook.get_cell(0, "C2").value # 1.5
scientific_value = workbook.get_cell(0, "D2").value # 0.003
string_value = workbook.get_cell(0, "E2").value # abc
error_value = workbook.get_cell(0, "F2").value # #DIV/0!
Aritmetické operátory
| Operátor | Význam | Příklad |
|---|---|---|
+ |
Sčítání nebo unární plus | 2+3 |
- |
Odečtení nebo negace | 2-3, -3 |
* |
Násobení | 2*3 |
/ |
Dělení | 2/3 |
% |
Procento | 30% |
^ |
Umocnění | 2^3 |
Použijte závorky pro explicitní určení pořadí výpočtu, např. (A2+B2)*C2.
Operátory porovnání
Výrazy porovnání vracejí logické hodnoty.
| Operátor | Význam | Příklad |
|---|---|---|
= |
Rovná se | A2=3 |
<> |
Nerovná se | A2<>3 |
> |
Větší než | A2>3 |
>= |
Větší nebo rovno | A2>=3 |
< |
Menší než | A2<3 |
<= |
Menší nebo rovno | A2<=3 |
Podporované předdefinované funkce
Aspose.Slides obsahuje vestavěný vyhodnocovač vzorců pro listy grafů, ale není to úplný výpočetní engine Excelu. Dokumentovaný soubor funkcí je omezen na funkce uvedené níže. Nepředpokládejte, že libovolná funkce Excelu může být přepočítána metodou calculate_formulas.
| Funkce | Účel nebo podpora | Příklad |
|---|---|---|
ABS |
Absolutní hodnota | ABS(A2) |
AVERAGE |
Aritmetický průměr | AVERAGE(B2:B5) |
CEILING |
Zaokrouhlení čísla nahoru na násobek | CEILING(A2,5) |
CHOOSE |
Výběr hodnoty podle indexu | CHOOSE(A2,"Low","High") |
CONCAT |
Spojení textových hodnot | CONCAT(A2,B2) |
CONCATENATE |
Spojení textových hodnot | CONCATENATE(A2," ",B2) |
DATE |
Vytvoření datumové hodnoty pomocí systému 1900 | DATE(2026,8,19) |
DAYS |
Počet dní mezi daty | DAYS(B2,A2) |
FIND |
Najde jeden text uvnitř jiného | FIND("-",A2) |
FINDB |
Hledání bajtově orientované | FINDB("a",A2) |
IF |
Podmíněný výsledek | IF(A2>0,A2,0) |
INDEX |
Referenční forma | INDEX(A2:C4,2,3) |
LOOKUP |
Vektorová forma | LOOKUP(A2,B2:B5,C2:C5) |
MATCH |
Vektorová forma | MATCH(A2,B2:B5,0) |
MAX |
Maximální hodnota | MAX(B2:B5) |
SUM |
Součet hodnot | SUM(B2:B5) |
VLOOKUP |
Vertikální vyhledávání | VLOOKUP(A2,B2:D10,3,FALSE) |
Omezení uvedená v tabulce jsou podstatná: INDEX je dokumentován v referenční formě, zatímco LOOKUP a MATCH v jejich vektorových formách. DATE používá systém 1900. Funkce a vlastnosti, které zde nejsou uvedeny, by měly být považovány za nepodporované vestavěným vyhodnocovačem Aspose.Slides, pokud nejsou dokumentovány zvlášť.
Výpočet vzorců s preferovanou kulturou
Některé funkce sešitu interpretují text podle kulturně specifických pravidel. To je zvláště důležité pro funkce určené pro jazyky používající dvojbajtové znaky (DBCS). Pro správný výpočet takových vzorců vytvořte LoadOptions, nastavte SpreadsheetOptions.preferred_culture přes LoadOptions.spreadsheet_options a poté načtěte prezentaci.
Následující příklad vybírá japonskou kulturu, otevírá prezentaci s nastavenými možnostmi načtení a volá ChartDataWorkbook.calculate_formulas pro každý sešit grafu:
import aspose.slides as slides
import aspose.slides.charts as charts
load_options = slides.LoadOptions()
load_options.spreadsheet_options.preferred_culture = "ja-JP"
with slides.Presentation("presentation.pptx", load_options) as presentation:
for slide in presentation.slides:
for shape in slide.shapes:
if isinstance(shape, charts.Chart):
shape.chart_data.chart_data_workbook.calculate_formulas()
Preferovaná kultura je součástí konfigurace načítání prezentace, takže ji specifikujte před vytvořením instance Presentation. Použijte kulturu očekávanou ve vzorcích sešitu; např. ja-JP pro vzorce, které mají sledovat japonská DBCS pravidla.
Přepočet a uložené hodnoty
Soubory tabulek obvykle ukládají jak vzorec, tak jeho naposledy vypočítanou hodnotu. Aspose.Slides může takto přečíst uloženou hodnotu z IChartDataCell.value, když je prezentace načtena a relevantní data grafu nebyla změněna.
Po změně vstupních buněk nebo vzorců se nespoléhejte na starý uložený výsledek. Zavolejte ChartDataWorkbook.calculate_formulas před čtením vypočítaných hodnot nebo uložením dat grafu, která na nich závisejí.
U vzorců mimo podporovanou podmnožinu může Aspose.Slides nedokázat vzorec rozparsovat nebo zjistit jeho závislosti. Pokud byl sešit upraven, předchozí uložená hodnota již není spolehlivá. V takové situaci může čtení hodnoty buňky s nepodporovanými daty vyvolat CellUnsupportedDataException.
Pokud váš graf závisí na Excelových funkcích, které Aspose.Slides nevyhodnocuje, vypočítejte tyto vzorce pomocí tabulkového engine, který je podporuje, a zapište výsledné hodnoty zpět do sešitu grafu. Nepřidělujte nepodporovaným vzorcům hádané hodnoty.
Zpracování chyb vzorců
Rozlišujeme dva různé typy problémů.
Vzorec může být platný, ale vrátit chybu tabulky, např. #DIV/0!, #N/A, #NAME?, #NULL!, #NUM!, #REF! nebo #VALUE!. V tomto případě je chybový token výsledkem buňky a lze jej získat přes value.
Vzorec může také selhat při parsování, při odkazování, při zjišťování závislostí nebo pokud používá nepodporovaná data. Aspose.Slides poskytuje pro tyto případy tabulkově specifické výjimky: CellInvalidFormulaException, CellInvalidReferenceException, CellCircularReferenceException a CellUnsupportedDataException.
Když vzorce pocházejí ze šablon nebo vstupu uživatele, obalte přepočet a přístup k hodnotě těmito výjimkami:
import aspose.slides as slides
import aspose.slides.charts as charts
import aspose.slides.spreadsheet as spreadsheet
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 300)
workbook = chart.chart_data.chart_data_workbook
cell = workbook.get_cell(0, "A2")
cell.formula = "SUM(B2:B5)"
try:
workbook.calculate_formulas()
print(cell.value)
except spreadsheet.CellInvalidFormulaException as ex:
print(f"Invalid formula: {ex}")
except spreadsheet.CellInvalidReferenceException as ex:
print(f"Invalid cell reference: {ex}")
except spreadsheet.CellCircularReferenceException as ex:
print(f"Circular reference: {ex}")
except spreadsheet.CellUnsupportedDataException as ex:
print(f"Unsupported spreadsheet data: {ex}")
Praktická omezení
Podpora vzorců v listech grafů je určena pro definovanou podmnožinu výpočtů tabulek, nikoli pro plnou kompatibilitu s Excelem. Mějte tyto omezení na paměti při navrhování workflow reportování:
- Používejte pouze dokumentované konstanty, operátory, odkazy a funkce, pokud požadujete, aby Aspose.Slides přepočítával vzorce.
- Přepočtěte po změně buněk, na nichž výsledek vzorce závisí.
- Považujte uložené hodnoty z načtených prezentací za snímky, ne za náhradu přepočtu po úpravách.
- Otestujte vzorce z existujících šablon před tím, než se spolehnete na jejich vypočítané hodnoty, zejména pokud používají funkce mimo dokumentovaný seznam.
- Pro vzorce, které vyžadují plný výpočetní engine tabulek, je vypočítejte externě a poté aktualizujte sešit grafu výslednými hodnotami.
Často kladené otázky
Jaký je rozdíl mezi formula a r1c1_formula?
formula ukládá výraz ve stylu A1, např. B2-C2. r1c1_formula ukládá výraz ve stylu R1C1, např. RC[-2]-RC[-1]. Použijte notaci, která nejlépe odpovídá tomu, jak vzorce generujete nebo kopírujete.
Musím po výpočtu číst buňku samotnou nebo její hodnotu?
ChartDataWorkbook.get_cell vrací IChartDataCell. Pro získání vypočítaného výsledku přečtěte vlastnost value té buňky po přepočtu.
Kdy mám volat calculate_formulas?
Zavolejte calculate_formulas po změně vstupních hodnot nebo vzorců a před tím, než budete potřebovat vypočítané výsledky. Tím se aktualizují hodnoty vzorců, které vestavěný vyhodnocovač podporuje.
Podporuje Aspose.Slides všechny Excel funkce?
Ne. Vestavěný vyhodnocovač podporuje pouze dokumentovanou podmnožinu funkcí. Funkce mimo tuto podmnožinu by neměly být považovány za správně přepočítané. Pokud je vyžadována úplná kompatibilita s Excelovými vzorci, proveďte výpočet pomocí vhodného tabulkového engine a zapište finální hodnoty do sešitu grafu.
Co se stane, pokud načtená prezentace obsahuje nepodporovaný vzorec?
Pokud se data grafu nezměnila, sešit může stále obsahovat dříve vypočítanou uloženou hodnotu. Po úpravě souvisejících dat může tato uložená hodnota být neplatná. Přístup k buňce, jejíž vzorec nelze zpracovat, může vyvolat CellUnsupportedDataException.
Jsou hodnoty chyb ve vzorcích stejné jako výjimky v Pythonu?
Ne. Výsledek jako #DIV/0! je hodnota tabulky vzniklá platným výpočtem. Výjimky jako CellInvalidFormulaException nebo CellCircularReferenceException signalizují, že vzorec nelze normálně zpracovat.
Aktualizuje se graf automaticky, když se změní buňka vzorce?
Řada grafu může odkazovat na buňky sešitu. Nejprve přepočtěte sešit, poté uložte nebo vykreslete prezentaci. Pokud data grafu odkazují na vypočítané buňky, graf použije aktualizované hodnoty; není potřeba žádná samostatná metoda pro obnovení grafu.
Mohou grafy používat externí sešit Excel?
Ano, data grafu lze nakonfigurovat tak, aby používala externí sešit přes API dat grafu. Nicméně workflow výpočtu vzorců popsané v tomto článku se týká sešitu dat grafu a podmnožiny vzorců vyhodnocovaných Aspose.Slides. Nepředpokládejte, že calculate_formulas poskytuje úplný přepočet libovolných vzorců v externím souboru XLSX.
Mohu používat vzorce, které odkazují na jiný list nebo sešit?
Reference ve stylu Excel mohou v sešitech grafů existovat, ale vyhodnocení vzorců je omezeno podporovaným parserem a sadou funkcí. Pokud je pro vás nezbytný odkaz napříč listy nebo na externí sešit, ověřte si přesný vzorec s vaší cílovou verzí Aspose.Slides. Pro workflow vyžadující širokou kompatibilitu odkazů Excelu vypočítejte sešit externě a výsledné hodnoty vraťte do dat grafu.
Měly by řetězce vzorců začínat znakem =?
Příklady API Aspose.Slides přiřazují výrazy jako B2-C2 nebo SUM(B2:B5) bez úvodního =. Používání této podoby udržuje generované vzorce v souladu s dokumentovanými příklady API.