Diagram munkafüzetek kezelése prezentációkban Python via Java segítségével
Áttekintés
Ez a cikk elmagyarázza, hogyan dolgozzunk a diagram munkafüzetekkel az Aspose.Slides-ban. Bemutatja, hogyan olvassunk és írjunk diagram adatokat munkafüzet adatfolyamokon keresztül, hogyan használjunk munkafüzet cellákat diagram adatcímkékként, hogyan férjünk hozzá a munkalap gyűjteményekhez, és hogyan határozzuk meg az adatforrás típusát a diagram értékekhez.
Továbbá tárgyalja a külső munkafüzetek diagram adatforrásként való használatát. A példák bemutatják, hogyan hozzunk létre és rendeljünk hozzá egy külső munkafüzetet, hogyan kérjük le egy diagramhoz kapcsolt külső munkafüzet útvonalát, és hogyan szerkesszük a diagram adatokat, amikor a munkafüzet elérhető.
Hiányzó adatokat tartalmazó munkafüzet cellák esetén lásd a Az üres cellák megjelenítésének szabályozása cikket, amely bemutatja az üres cella és a nulla közti különbséget, valamint egy vonaldiagramot a rendelkezésre álló megjelenítési módok összehasonlításával.
Rejtett sorok és oszlopok adatainak felvétele
Használd a Chart.setPlotVisibleCellsOnly metódust annak vezérlésére, hogy a diagram a rejtett munkalap sorokból és oszlopokból származó adatokat jelenítse‑e meg. Állítsd True‑ra, ha csak a látható cellákat szeretnéd ábrázolni, vagy False‑ra, ha a látható és rejtett cellákat egyaránt fel akarod venni. Ez a beállítás a diagram ábrázolását szabályozza; nem rejti el vagy jeleníti meg a munkalap sorait vagy oszlopait.
A példaprezentáció egy oszlopdiagrammal rendelkezik, amely az első dia első alakzataként jelenik meg. A beágyazott munkalap, Sheet1, a következő forrástartományt tartalmazza, A1:C4. A 3. sor és a C oszlop rejtett, de celláik továbbra is tartalmaznak értékeket.
| Munkalap sor | A: Hónap | B: Kiskereskedelem | C: Nagykereskedelem (rejtett oszlop) |
|---|---|---|---|
| 2 | január | 10 | 30 |
| 3 (rejtett sor) | február | 40 | 60 |
| 4 | március | 20 | 50 |
A forráscellákhoz a ChartData.getChartDataWorkbook segítségével férhetsz hozzá, és a ChartDataCell.isHidden segítségével ellenőrizheted a rejtett állapotukat. Ez a módszer a rejtett állapotot anélkül jelzi, hogy megváltoztatná azt. Ebben a fájlban a B2 látható, a B3 a rejtett sorhoz tartozik, és a C2 a rejtett oszlophoz; a példa ennek megfelelően False, True, és True értékeket ír ki.
Ehhez a példához frissítsd a diagram adatokat a plot beállítás módosítása után: tartsd meg a beágyazott munkafüzetet a readWorkbookStream segítségével, és töltsd be újra a writeWorkbookStream használatával. Ha minden cellát fel szeretnél venni, használd a setRange metódust a teljes tartomány visszaállításához, beleértve a rejtett februári kategóriát is. Csak a jelző megváltoztatása nem elegendő a minta gyorsítótárazott diagram adatainak és kategória címkéinek frissítéséhez.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, Presentation, SaveFormat
presentation = Presentation("hidden-source-data.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
workbook = chart.getChartData().getChartDataWorkbook()
print("B2 hidden:", workbook.getCell(0, "B2").isHidden())
print("B3 hidden:", workbook.getCell(0, "B3").isHidden())
print("C2 hidden:", workbook.getCell(0, "C2").isHidden())
workbook_data = chart.getChartData().readWorkbookStream()
for visible_only in (True, False):
chart.setPlotVisibleCellsOnly(visible_only)
# Frissítse a diagram adatokat a beágyazott munkafüzettől.
chart.getChartData().writeWorkbookStream(workbook_data)
if not visible_only:
# Állítsa vissza a teljes forrásintervallumot, beleértve a rejtett kategóriákat.
chart.getChartData().setRange("Sheet1!$A$1:$C$4")
presentation.save(f"hidden_cells_{visible_only}.pptx", SaveFormat.Pptx)
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
A példa két verziót ment a prezentációból: egyet, amely csak a látható Kiskereskedelem értékeket (10 és 20) tartalmazza, és egyet, amely mind a hat értéket tartalmazza. Az alábbi képek a két ábrázolási módot mutatják. A 3. sor és a C oszlop mindkét beágyazott munkafüzetben rejtett marad.
Csak látható cellák (True) |
Minden cella (False) |
|---|---|
![]() |
![]() |
Egy rejtett, értéket tartalmazó cella különbözik egy üres cellától. A Chart.setDisplayBlanksAs szabályozza, hogy a hiányzó értékek hogyan jelenjenek meg; nem vonja be vagy zárja ki a rejtett forrásadatokat. Lásd a Az üres cellák megjelenítésének szabályozása példát.
Diagram adatintervallumának lekérdezése
Mielőtt frissítenéd a munkafüzet adatokat egy meglévő prezentációban, vizsgáld meg a forrásintervallumokat, hogy meghatározd, mely munkalap cellákat használja az egyes diagramok. A ChartData.getRange metódus visszaadja a jelenlegi adatintervallumot egy munkalap‑kvalifikált képletként, például Sheet1!$A$1:$D$5. Itt a Sheet1 a munkalap neve, a ! választja el a cellatartománytól, a $A$1:$D$5 pedig az A1‑től D5‑ig terjedő cellákat jelöli. A dollárjelek abszolút sor‑ és oszlopreferenciákat jelölnek.
A módszer a jelenlegi tartományt anélkül olvassa ki, hogy módosítaná a diagramot vagy annak munkafüzetét. Ha a diagram nem használ munkafüzetet adatforrásként, InvalidOperationException‑t dob. További információkért lásd a ChartData API hivatkozás oldalát.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, Presentation
InvalidOperationException = jpype.JClass("com.aspose.slides.exceptions.InvalidOperationException")
presentation = Presentation("presentation.pptx")
try:
for slide in presentation.getSlides():
for shape in slide.getShapes():
if isinstance(shape, Chart):
try:
data_range = shape.getChartData().getRange()
print(f"{shape.getName()}: {data_range}")
except InvalidOperationException:
print(f"{shape.getName()}: The chart does not use a workbook as its data source.")
finally:
presentation.dispose()
Diagram adatainak olvasása és írása munkafüzetből
Az Aspose.Slides for Python via Java biztosítja a readWorkbookStream és a writeWorkbookStream metódusokat, amelyek lehetővé teszik a diagram adat munkafüzetek (az Aspose.Cells‑el szerkesztett diagram adatokkal) olvasását és írását. Megjegyzés: a diagram adatokat ugyanabban a módon vagy hasonló szerkezettel kell elrendezni, mint a forrás.
Ez a példa egy olyan prezentációt használ, amelynek első diájának első alakzata egy diagram. Beolvassa a beágyazott munkafüzetet egy bájt‑tömbbe, törli a meglévő sorozatokat és kategóriákat, majd visszaírja ugyanazt a munkafüzetet. A módosítások memóriában maradnak; a példa nem menti a prezentációt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, Presentation
presentation = Presentation("chart.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
chart_data = chart.getChartData()
workbook_data = chart_data.readWorkbookStream()
chart_data.getSeries().clear()
chart_data.getCategories().clear()
chart_data.writeWorkbookStream(workbook_data)
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
Diagram elrendezésének ellenőrzése a munkafüzet módosítása után
Ha egy beágyazott munkafüzetet egy módosított változattal cserélsz, a diagram megtartja az eredeti sorozat‑ és kategória‑gyűjteményeit. Ez a nem‑egyezés a Chart.validateChartLayout hibához vezethet, ha index‑túl‑tartomány hiba lép fel. Töröld a meglévő sorozatokat és kategóriákat, mielőtt a frissített munkafüzetet visszaírnád a diagramba. Ez a példa egy olyan diagramot használ, amely az első dia első alakzataként jelenik meg. A megjegyzés jelzi, hol történne a munkafüzet szerkesztése; a futtatható példa visszaírja az eredeti munkafüzetet, és memória‑szinten ellenőrzi az elrendezést.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, Presentation
presentation = Presentation("chart.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
chart_data = chart.getChartData()
workbook_data = chart_data.readWorkbookStream()
# Módosítsa itt a munkafüzet bájtjait, például az Aspose.Cells használatával.
chart_data.getSeries().clear()
chart_data.getCategories().clear()
chart_data.writeWorkbookStream(workbook_data)
chart.validateChartLayout()
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
A gyűjtemények törlése eltávolítja a régi adatreferenciákat, mielőtt a munkafüzet visszaírásra kerül. Építsd újra a szükséges sorozat‑ és kategória‑leképezéseket a frissített munkafüzethez, mielőtt a diagramot használnád.
Egyedi számformátumok beállítása munkafüzet cellákhoz
Használd a ChartDataCell.setCustomNumberFormat metódust, hogy szabályozd, hogyan jelennek meg a numerikus értékek egy diagram beágyazott munkafüzetében. Például egy jelentésnek szüksége lehet a konverziós arányra, amelyet négy tizedesjegyű százalékban, valamint egy együtthatóra, amelyet öt tizedesjegyben szeretnénk megjeleníteni. A két értéket tartsd numerikus formában, hogy a számítások és a diagram ábrázolása továbbra is lehetséges legyen.
A számformátum csak a megjelenítést változtatja, nem a tárolt értéket. A 0.0000% formátum a 0.125 értéket 12.5000%‑ként jeleníti meg; a tárolt szám nem lesz 12.5. Hasonlóképpen a 0.00000 formátum a 0.1234567‑et 0.12346‑ként mutatja anélkül, hogy a tárolt értéket kerekítené. Ha az egyedi formátum egy üres karakterlánc (""), akkor a getPresetNumberFormat által visszaadott formátum kerül felhasználásra.
A következő példa egy oszlopdiagramot hoz létre, és a celláihoz a getChartDataWorkbook segítségével fér hozzá. Az 0‑s munkalapon a B2 tartalmazza a konverziós rátát, a C2 pedig az együtthatót. Mindkét cella a diagram értékét szolgáltatja. A példa emellett engedélyezi a forrásformátumokhoz kapcsolt értékcímkéket.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat, SlideSizeScaleType
presentation = Presentation()
try:
presentation.getSlideSize().setSize(720, 270, SlideSizeScaleType.DoNotScale)
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 20, 620, 210)
chart.setTitle(False)
chart.getAxes().getVerticalAxis().setNumberFormatLinkedToSource(False)
chart.getAxes().getVerticalAxis().setNumberFormat("0.00")
chart.getAxes().getVerticalAxis().setAutomaticMinValue(False)
chart.getAxes().getVerticalAxis().setMinValue(0)
chart.getChartData().getSeries().clear()
chart.getChartData().getCategories().clear()
workbook = chart.getChartData().getChartDataWorkbook()
workbook.clear(0)
category_cell = workbook.getCell(0, "A2", "Sample")
chart.getChartData().getCategories().add(category_cell)
percentage_cell = workbook.getCell(0, "B2", jpype.JDouble(0.125))
percentage_cell.setCustomNumberFormat("0.0000%")
percentage_name = workbook.getCell(0, "B1", "Conversion rate")
percentage_series = chart.getChartData().getSeries().add(percentage_name, chart.getType())
percentage_series.getDataPoints().addDataPointForBarSeries(percentage_cell)
precision_cell = workbook.getCell(0, "C2", jpype.JDouble(0.1234567))
precision_cell.setCustomNumberFormat("0.00000")
precision_name = workbook.getCell(0, "C1", "Coefficient")
precision_series = chart.getChartData().getSeries().add(precision_name, chart.getType())
precision_series.getDataPoints().addDataPointForBarSeries(precision_cell)
for series in chart.getChartData().getSeries():
label_format = series.getDataPoints().get_Item(0).getLabel().getDataLabelFormat()
label_format.setShowValue(True)
label_format.setNumberFormatLinkedToSource(True)
presentation.save("CustomCellFormats.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
A munkafüzet cellaformátumok különállóak a diagram tengelyeire vagy adatcímkéire közvetlenül beállított formátumoktól. Ebben a példában minden címke a forráscellájának értékét jeleníti meg, mivel a setShowValue True‑ra van állítva, és a setNumberFormatLinkedToSource szintén True. A prezentáció mentése és újranyitása után a címkék 12.5000% és 0.12346 értékeket mutatják, ahogy az alább látható. A függőleges tengely saját számformátumot használ, amelyet a setNumberFormat 0.00‑ra állít, a setNumberFormatLinkedToSource pedig False.
Az adatcímke független formázásához állítsd a forrásra mutató jelzőt False‑ra, és rendelj hozzá egy formátumot a setNumberFormat segítségével. Ez nem változtatja meg a munkafüzet cellájának formátumát. Például egy önálló 0.00 formátumú címke az első értéket 0.13‑ként jeleníti meg, míg a B2 továbbra 12.5000%‑t mutat. Lásd a Diagram adatcímkék cikket a közvetlen címkeformázáshoz.

Munkafüzet cella beállítása diagram adatcímkének
Használhatod a munkafüzet cellák szövegét diagram adatcímkeként.
Ez a példa egy buborékdiagramot ad hozzá az első diához egy meglévő prezentációban. A 0‑s munkalapon az A10:A12 tartományt használja az első sorozat három első címkéjének, engedélyezi a címkék cellákból származását, és elmenti a frissített prezentációt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation("chart2.pptx")
try:
slide = presentation.getSlides().get_Item(0)
label_values = ["Label 0 cell value", "Label 1 cell value", "Label 2 cell value"]
chart = slide.getShapes().addChart(ChartType.Bubble, 50, 50, 600, 400, True)
series = chart.getChartData().getSeries()
data_labels = series.get_Item(0).getLabels()
data_labels.getDefaultDataLabelFormat().setShowLabelValueFromCell(True)
workbook = chart.getChartData().getChartDataWorkbook()
for i in range(3):
label_cell = workbook.getCell(0, f"A{10 + i}", label_values[i])
data_labels.get_Item(i).setValueFromCell(label_cell)
presentation.save("resultchart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Munkalapok kezelése
A ChartDataWorkbook.getWorksheets metódus hozzáférést biztosít a diagram munkafüzet munkalapjaihoz. Ez a példa egy kördiagramot hoz létre alapértelmezett adatokkal, és a konzolra írja minden munkalap nevét.
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.Pie, 50, 50, 400, 500)
workbook = chart.getChartData().getChartDataWorkbook()
for i in range(workbook.getWorksheets().size()):
print(workbook.getWorksheets().get_Item(i).getName())
finally:
presentation.dispose()
Az adatforrás típusának megadása
A sorozat pontértékei közvetlenül numerikus literálokként is tárolhatók. Lásd a Sorozatértékek beállítása numerikus literálokkal példát a teljes példához, amely menti és olvassa őket. A pontértékek forrás típusa különbözik a diagram belső vagy külső munkafüzet beállításától; a numerikus literálok használata önmagában nem távolítja el a beágyazott munkafüzetet.
Ez a példa egy 3D oszlopdiagramot hoz létre alapértelmezett adatokkal, és két sorozatnevet állít be különböző adatforrásokkal. Az első nevet karakterlánc literálként, a másodikat a 0‑s munkalap C1 cellájából veszi. A DataSourceType felsorolás választja ki a forrást minden névhez. A példa elmenti a prezentációt a frissített sorozatnevekkel.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, DataSourceType, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Column3D, 50, 50, 600, 400, True)
literal_name = chart.getChartData().getSeries().get_Item(0).getName()
literal_name.setDataSourceType(DataSourceType.StringLiterals)
literal_name.setData("LiteralString")
cell_name = chart.getChartData().getSeries().get_Item(1).getName()
name_cell = chart.getChartData().getChartDataWorkbook().getCell(0, "C1", "NewCell")
cell_name.setDataSourceType(DataSourceType.Worksheet)
cell_name.setData(name_cell)
presentation.save("pres.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Nem támogatott beágyazott munkafüzetformátumok észlelése
Az Aspose.Slides nem támogatja az Excel bináris munkafüzet (.xlsb) formátumot, amely bizonyos diagramokban beágyazható. Használhatod a getEmbeddedWorkbookType metódust a ChartData‑n együtt a WorkbookType felsorolással, hogy észleld a nem támogatott formátumokat, és kihagyjad ezeket a diagramokat. Ez a példa vizsgálja az első dia alakzatait egy meglévő prezentációban, kihagyja a nem diagram alakzatokat, és diagnosztikai üzenetet ír ki minden .xlsb munkafüzettel rendelkező diagramhoz.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpage.startJVM()
from asposeslides.api import Chart, ChartDataSourceType, Presentation, WorkbookType
presentation = Presentation("sample.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if not isinstance(shape, Chart):
continue
chart_data = shape.getChartData()
is_internal_workbook = chart_data.getDataSourceType() == ChartDataSourceType.InternalWorkbook
is_binary_macro = chart_data.getEmbeddedWorkbookType() == WorkbookType.WorkbookBinaryMacro
if is_internal_workbook and is_binary_macro:
print("Skipping a chart with an unsupported .xlsb workbook.")
continue
# Olvassa vagy módosítsa a támogatott diagram munkafüzet adatokat itt.
finally:
presentation.dispose()
Külső munkafüzet
Az Aspose.Slides támogatja a külső munkafüzetek diagram adatforrásként való használatát.
Külső munkafüzet létrehozása
Használd a readWorkbookStream és a setExternalWorkbook metódusokat, hogy egy beágyazott diagram munkafüzetet exportálj egy fájlba, és a diagramot ehhez a külső munkafüzethez kapcsoljad.
Ez a példa egy kördiagramot hoz létre alapértelmezett adatokkal, és exportálja a munkafüzett. A fájlírás befejezése után a külső munkafüzetet a diagram adatforrásaként állítja be, majd elmenti a kapcsolt prezentációt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
from pathlib import Path
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600)
workbook_path = Path("externalWorkbook1.xlsx").resolve()
workbook_data = chart.getChartData().readWorkbookStream()
Path(workbook_path).write_bytes(bytes(workbook_data))
chart.getChartData().setExternalWorkbook(str(workbook_path))
presentation.save("externalWorkbook.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Külső munkafüzet beállítása
A setExternalWorkbook metódus segítségével egy külső munkafüzetet rendelhetsz a diagramhoz adatforrásként. Ez a metódus használható a külső munkafüzet elérési útjának frissítésére is (ha az áthelyezésre került).
Bár a távoli helyeken vagy erőforrásokban tárolt munkafüzetek adatait nem szerkesztheted, továbbra is használhatod őket külső adatforrásként. Ha relatív elérési út van megadva egy külső munkafüzethez, az automatikusan teljes útvonalra konvertálódik.
Ez a példa egy külső munkafüzettet használ, amelynek Sheet1 nevű munkalapján B1 cellában egy sorozatnév, A2:A4 cellákban kategórianév, B2:B4 cellákban numerikus értékek vannak. A példa egy kördiagramot hoz létre, a munkafüzetet összekapcsolja, és a setRange segítségével A1:B4‑et egy sorozat és három kategória leképezésére használja. A prezentációt a kapcsolt diagrammal menti.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
from pathlib import Path
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, True)
chart_data = chart.getChartData()
workbook_path = str(Path("externalWorkbook.xlsx").resolve())
chart_data.setExternalWorkbook(workbook_path)
chart_data.setRange("Sheet1!$A$1:$B$4")
presentation.save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
A setExternalWorkbook updateChartData paramétere szabályozza, hogy a munkafüzet betöltődjön‑e.
- Ha az
updateChartDataFalse, csak a munkafüzet útvonala frissül. A diagram adatainak betöltése vagy frissítése a célmunkafüzettel nem történik, így a munkafüzet hiányozhat. - Ha az
updateChartDataTrue, a diagram adatai frissülnek a célmunkafüzettel.
A következő példa egy helyettesítő URL‑t rendeli a updateChartData False értékével. A kördiagram alapértelmezett adatait megtartja, és a prezentációt úgy menti, hogy a nem elérhető munkafüzetet nem tölti be.
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.Pie, 50, 50, 400, 600, True)
chart_data = chart.getChartData()
chart_data.setExternalWorkbook("https://example.com/unavailable-workbook.xlsx", False)
presentation.save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Diagram külső adatforrás munkafüzetének elérési útjának lekérdezése
A diagramhoz kapcsolt munkafüzet azonosításához ellenőrizd, hogy a diagram külső adatforrást használ‑e, majd kérd le a munkafüzet elérési útját.
Ez a példa az első dián lévő első alakzatot vizsgálja egy olyan prezentációban, amely külső munkafüzettel van összekapcsolva. Ha a diagram külső munkafüzettel van összekapcsolva, a példa a getExternalWorkbookPath értékét írja ki a konzolra, majd elment egy másolatot a prezentációról.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, ChartDataSourceType, Presentation, SaveFormat
presentation = Presentation("externalWorkbook.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
chart_data = chart.getChartData()
if chart_data.getDataSourceType() == ChartDataSourceType.ExternalWorkbook:
print(chart_data.getExternalWorkbookPath())
else:
print("The chart does not use an external workbook.")
else:
print("The first shape is not a chart.")
presentation.save("Result.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Diagram adatainak szerkesztése
A külső munkafüzetek adatait ugyanúgy szerkesztheted, ahogyan a belső munkafüzetek tartalmát módosítanád. Ha egy külső munkafüzet nem tölthető be, kivétel keletkezik.
Ez a példa egy diagramot használ, amely az első dián lévő első alakzat, és egy elérhető külső munkafüzettel van összekapcsolva. A első sorozat első adatpontjának cella‑alapú értékét 100‑ra állítja, majd menti a frissített prezentációt. A cellaértékek szerkesztése frissítheti a kapcsolt külső XLSX fájlt, ezért másolatot használj, ha az eredeti munkafüzettet meg akarod őrizni.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
series = chart.getChartData().getSeries()
if series.size() > 0 and series.get_Item(0).getDataPoints().size() > 0:
value_cell = series.get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell()
if value_cell is not None:
value_cell.setValue(jpype.JInt(100))
presentation.save("presentation_out.pptx", SaveFormat.Pptx)
else:
print("The first data point is not linked to a workbook cell.")
else:
print("The chart has no data points to edit.")
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
Munkafüzet helyreállítása a diagram gyorsítótárából
Ha egy diagram egy hiányzó vagy nem elérhető külső munkafüzetet használ, az Aspose.Slides helyreállíthatja a diagram munkafüzetét a prezentációban gyorsítótárazott adatokból. Hozd létre a LoadOptions objektumot, hívd meg a LoadOptions.setSpreadsheetOptions metódust, és a SpreadsheetOptions.setRecoverWorkbookFromChartCache‑t állítsd True‑ra a prezentáció megnyitása előtt.
Az alábbi Python példa helyreállítja a munkafüzet adatokat egy olyan diagramhoz, amely az első dián lévő első alakzat, és egy nem elérhető külső munkafüzettel hivatkozik. A helyreállított adatokat a Chart.getChartData és a ChartData.getChartDataWorkbook segítségével érheti el:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Chart, LoadOptions, Presentation, SpreadsheetOptions
spreadsheet_options = SpreadsheetOptions()
spreadsheet_options.setRecoverWorkbookFromChartCache(True)
load_options = LoadOptions()
load_options.setSpreadsheetOptions(spreadsheet_options)
presentation = Presentation("presentation.pptx", load_options)
try:
slide = presentation.getSlides().get_Item(0)
shape_count = slide.getShapes().size()
if shape_count > 0 and isinstance(slide.getShapes().get_Item(0), Chart):
chart = slide.getShapes().get_Item(0)
recovered_workbook = chart.getChartData().getChartDataWorkbook()
# Olvassa vagy módosítsa a helyreállított munkafüzet adatokat itt.
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
Ha a külső munkafüzet nem érhető el, és a helyreállítás le van tiltva, az Aspose.Slides kivételt dob. Engedélyezd a helyreállítást csak akkor, ha a gyorsítótárazott diagramadatok használata elfogadható tartalék, mivel a gyorsítótár nem tartalmazhatja a külső munkafüzetben a prezentáció utolsó frissítése óta végzett változtatásokat.
GYIK
Meg tudom határozni, hogy egy adott diagram külső vagy beágyazott munkafüzetre hivatkozik‑e?
Igen. A diagram rendelkezik egy data source type és egy path to an external workbook tulajdonsággal; ha a forrás egy külső munkafüzet, a teljes útvonal lekérdezésével ellenőrizheted, hogy egy külső fájl kerül‑e felhasználásra.
Támogatottak‑e a relatív útvonalak a külső munkafüzetekhez, és hogyan tárolódnak?
Igen. Ha relatív útvonalat adsz meg, az automatikusan átalakul abszolút útvonallá. A prezentáció az abszolút útvonalat tárolja a PPTX fájlban, így a munkafüzet áthelyezése esetén a hivatkozást frissíteni kell.
Használhatok‑e hálózati erőforrásokon vagy megosztott helyeken tárolt munkafüzeteket?
Igen, ilyen munkafüzetek használhatók külső adatforrásként. Azonban a távoli munkafüzetek közvetlen szerkesztése az Aspose.Slides‑sel nem támogatott – csak forrásként használhatók.
Az Aspose.Slides felülírja‑e a külső XLSX‑et a prezentáció mentésekor?
A prezentáció egy link to the external file‑et tárol. A cella‑alapú diagramadatok szerkesztése frissítheti a kapcsolt helyi XLSX fájlt is. Használj másolatot a munkafüzetről, ha az eredetit változatlanul szeretnéd hagyni.
Mi a teendő, ha a külső fájl jelszó‑védett?
Az Aspose.Slides nem fogad jelszót a hivatkozáshoz. Gyakori megoldás a védelem előzetes eltávolítása vagy egy feloldott másolat előkészítése (például az Aspose.Cells‑el), majd ennek a másolatnak a használata.
Több diagram is hivatkozhat‑e ugyanarra a külső munkafüzetre?
Igen. Minden diagram a saját hivatkozását tárolja. Ha mindegyik ugyanarra a fájlra mutat, a fájl frissítése minden diagramra kihat a következő adatbetöltéskor.

