Diagram munkafüzetek kezelése bemutatókban Python segítségével
Áttekintés
Ez a cikk bemutatja, hogyan lehet a diagram munkafüzetekkel dolgozni az Aspose.Slides-ben. Megmutatja, hogyan lehet a diagramadatokat munkafüzetfolyamok segítségével olvasni és írni, a munkafüzet cellákat diagram adatcímkékként használni, a munkalapgyűjteményekhez hozzáférni, és megadni az adatforrás típusát a diagramértékekhez.
Emellett bemutatja a külső munkafüzetek diagramadat-forrásként való használatát. A példák azt mutatják, hogyan hozhatunk létre és rendelhetünk hozzá egy külső munkafüzetet, hogyan szerezhetjük meg egy diagramhoz csatolt külső munkafüzet elérési útját, és hogyan szerkeszthetjük a diagram adatokat, ha a munkafüzet elérhető.
A hiányzó adatokat képviselő munkafüzetcellák esetén lásd a Control the Display of Empty Cells szakaszt az üres cella és a nulla közti különbségről, valamint a különböző megjelenítési módok vonaldiagram-összehasonlításáról.
Adatok bevonása rejtett sorokból és oszlopokból
Használja a Chart.plot_visible_cells_only metódust, hogy szabályozza, a diagram csak látható munkalap sorokból és oszlopokból ábrázolja-e az adatokat. Állítsa True értékre, ha csak a látható cellákat szeretné ábrázolni, vagy False értékre, ha a látható és a rejtett cellákat egyaránt fel szeretné venni. Ez a beállítás a diagram ábrázolását érinti; nem rejti el vagy jeleníti meg a munkalap sorait vagy oszlopait.
A példa bemutató egy oszlopdiagramot tartalmaz első alakzatként az első dián. A beágyazott munkalap, Sheet1, a következő forrás‐tartomá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 | January | 10 | 30 |
| 3 (rejtett sor) | February | 40 | 60 |
| 4 | March | 20 | 50 |
A forráscellákat a ChartData.chart_data_workbook segítségével érheti el, és a ChartDataCell.is_hidden segítségével vizsgálhatja meg a rejtett állapotukat. Ez a tulajdonság csak olvasható. Ebben a fájlban a B2 látható, a B3 a rejtett sorhoz tartozik, a C2 pedig a rejtett oszlophoz; a példa sorban False, True, True értékeket ír ki.
Ehhez a példához a diagram adatainak frissítése a megjelenítési beállítás módosítása után: a beágyazott munkafüzetet a read_workbook_stream módszerrel tartsa meg, és töltsön be újra a write_workbook_stream segítségével. Az összes cella bevonásakor használja a set_range 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 mintában tárolt diagram adatainak és kategóriacímkéinek frissítéséhez.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("hidden-source-data.pptx") as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
workbook = chart.chart_data.chart_data_workbook
print(f"B2 hidden: {workbook.get_cell(0, 'B2').is_hidden}")
print(f"B3 hidden: {workbook.get_cell(0, 'B3').is_hidden}")
print(f"C2 hidden: {workbook.get_cell(0, 'C2').is_hidden}")
workbook_stream = chart.chart_data.read_workbook_stream()
for visible_only in [True, False]:
chart.plot_visible_cells_only = visible_only
# Frissítse a diagram adatokat a beágyazott munkafüzetről.
workbook_stream.seek(0)
chart.chart_data.write_workbook_stream(workbook_stream)
if not visible_only:
# Állítsa vissza a teljes forrástartományt, beleértve a rejtett kategóriákat.
chart.chart_data.set_range("Sheet1!$A$1:$C$4")
presentation.save(f"hidden_cells_{visible_only}.pptx", slides.export.SaveFormat.PPTX)
else:
print("The first shape is not a chart.")
A példa két verzióban menti a bemutatót: egyben csak a látható Kiskereskedelem értékek (10 és 20), a másikban mind a hat érték. Az alábbi képek a mentett, újra megnyitott bemutatókból származnak; mindkét fájl megőrizte a hozzárendelt megjelenítési beállítást. 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ékkel rendelkező cella különbözik egy üres cellától. A Chart.display_blanks_as szabályozza, hogyan jelennek meg a hiányzó értékek; nem vonja be vagy zárja ki a rejtett forrásadatot. Lásd a Control the Display of Empty Cells példát.
Diagram adat-tartományának lekérése
Mielőtt egy meglévő bemutatóban a munkafüzet adatokat frissítené, ellenőrizze a forrás‐tartományokat, hogy mely munkalapcellákat használja a diagram. A ChartData.get_range metódus visszaadja az aktuális adat‑tartományt 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 oszlophivatkozásokat jelölnek.
A metódus a jelenlegi tartományt olvassa anélkül, hogy megváltoztatná a diagramot vagy annak munkafüzetét. Ha a diagram nem munkafüzetet használ adatforrásként, kivételt dob. További információért lásd a ChartData API Reference oldalt.
Ez a példa megnyit egy bemutatót, és közvetlenül minden dián ellenőrzi az alakzatokat diagramokra. Kiírja minden diagram nevét és forrás‑tartományát. Ha a tartomány lekérése sikertelen, diagnosztikai üzenetet ír ki, és a következő diagramra lép.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("presentation.pptx") as presentation:
for slide in presentation.slides:
for shape in slide.shapes:
if isinstance(shape, charts.Chart):
try:
data_range = shape.chart_data.get_range()
print(f"{shape.name}: {data_range}")
except RuntimeError as error:
print(f"{shape.name}: Unable to retrieve the chart data range. {error}")
Diagramadatok olvasása és írása munkafüzetből
Az Aspose.Slides for Python via .NET biztosítja a read_workbook_stream és a write_workbook_stream metódusokat, amelyek lehetővé teszik a diagramadat‑munkafüzetek (Az Aspose.Cells‑kel szerkesztett diagramadatokat tartalmazó) olvasását és írását. Megjegyzés: a diagramadatoknak ugyanúgy kell felépítve lenniük, vagy hasonló szerkezettel kell rendelkezniük, mint a forrás.
Ez a példa egy olyan bemutatót használ, amelynek első alakzata az első dián egy diagram. Beolvassa a beágyazott munkafüzetet egy folyamba, törli a meglévő sorozatokat és kategóriákat, majd visszaírja ugyanazt a munkafüzetet. A változások memóriában maradnak; a példa nem menti a bemutatót.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart.pptx") as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
chart_data = chart.chart_data
workbook_stream = chart_data.read_workbook_stream()
chart_data.series.clear()
chart_data.categories.clear()
workbook_stream.seek(0)
chart_data.write_workbook_stream(workbook_stream)
else:
print("The first shape is not a chart.")
Diagram elrendezésének ellenőrzése munkafüzet módosítása után
Ha egy beágyazott munkafüzetet egy módosított változattal helyettesít, a diagram megtartja az eredeti sorozat‑ és kategória‑gyűjteményeket. Ez az eltérés miatt a Chart.validate_chart_layout index‑tartomány‑hibával bukhat meg. Törölje a meglévő sorozatokat és kategóriákat, mielőtt a frissített munkafüzetet visszaírná a diagramba. Ez a példa egy olyan diagramot használ, amely az első dián az első alakzat. A megjegyzés azt jelzi, hol történne a munkafüzet szerkesztése; a futtatható példa visszaírja az eredeti munkafüzetet, és memóriában ellenőrzi az elrendezést.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart.pptx") as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
chart_data = chart.chart_data
workbook_stream = chart_data.read_workbook_stream()
# Módosítsa a munkafüzet áramlatát itt, például az Aspose.Cells használatával.
chart_data.series.clear()
chart_data.categories.clear()
workbook_stream.seek(0)
chart_data.write_workbook_stream(workbook_stream)
chart.validate_chart_layout()
else:
print("The first shape is not a chart.")
A gyűjtemények törlése megszünteti a régimódi adat‑hivatkozásokat, mielőtt a munkafüzet visszaírásra kerülne. Újra kell építeni a szükséges sorozat‑ és kategória‑leképezéseket a frissített munkafüzethez, mielőtt a diagramot használja.
Munkafüzetcellát diagramadat‑címkének beállítása
A munkafüzet cellák szövegét használhatja diagram adatcímkékként.
Ez a példa egy buborékdiagramot ad hozzá alapértelmezett adatokkal egy meglévő bemutató első diájához. Az első sorozat első három címkéjéhez az 0‑s munkalap A10:A12 celláit használja, engedélyezi a cellákból származó címkéket, és menti a frissített bemutatót.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("chart2.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.BUBBLE, 50, 50, 600, 400, True)
series = chart.chart_data.series[0]
workbook = chart.chart_data.chart_data_workbook
series.labels.default_data_label_format.show_label_value_from_cell = True
series.labels[0].value_from_cell = workbook.get_cell(0, "A10", "Label 0 cell value")
series.labels[1].value_from_cell = workbook.get_cell(0, "A11", "Label 1 cell value")
series.labels[2].value_from_cell = workbook.get_cell(0, "A12", "Label 2 cell value")
presentation.save("resultchart.pptx", slides.export.SaveFormat.PPTX)
Munkalapok kezelése
A ChartDataWorkbook.worksheets tulajdonság lehetővé teszi a diagram munkafüzet munkalapjaihoz való hozzáférést. Ez a példa egy kördiagramot hoz létre alapértelmezett adatokkal, és minden munkalap nevét kiírja a konzolra.
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.PIE, 50, 50, 400, 500)
workbook = chart.chart_data.chart_data_workbook
for worksheet in workbook.worksheets:
print(worksheet.name)
Az adatforrás típusának megadása
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ő név egy szöveges literált használ; a második a 0‑s munkalap C1 celláját. A DataSourceType enumerációval választható ki a forrás minden névhez. A példa menti a bemutatót a frissített sorozatnevekkel.
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.COLUMN_3D, 50, 50, 600, 400, True)
literal_name = chart.chart_data.series[0].name
literal_name.data_source_type = charts.DataSourceType.STRING_LITERALS
literal_name.data = "LiteralString"
cell_name = chart.chart_data.series[1].name
name_cell = chart.chart_data.chart_data_workbook.get_cell(0, "C1", "NewCell")
cell_name.data_source_type = charts.DataSourceType.WORKSHEET
cell_name.data = name_cell
presentation.save("pres.pptx", slides.export.SaveFormat.PPTX)
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ó. A ChartData embedded_workbook_type tulajdonságát a WorkbookType enumerációval együtt használva észlelheti a nem támogatott formátumokat, és kihagyhatja az érintett diagramokat. Ez a példa a meglévő bemutató első diájának alakzatait vizsgálja, a nem‑diagram alakzatokat átugorja, és diagnosztikai üzenetet ír ki minden .xlsb munkafüzetet beágyazott diagramhoz.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("sample.pptx") as presentation:
slide = presentation.slides[0]
for shape in slide.shapes:
if not isinstance(shape, charts.Chart):
continue
chart_data = shape.chart_data
is_internal_workbook = chart_data.data_source_type == charts.ChartDataSourceType.INTERNAL_WORKBOOK
is_binary_macro = chart_data.embedded_workbook_type == charts.WorkbookType.WORKBOOK_BINARY_MACRO
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 adatait itt.
Külső munkafüzet
Az Aspose.Slides támogatja a külső munkafüzetek diagramadat‑forrásként való használatát.
Külső munkafüzet létrehozása
Használja a read_workbook_stream és a set_external_workbook metódusokat a beágyazott diagram munkafüzet exportálásához fájlba, majd a diagram összekapcsolásához a külső munkafüzettel.
Ez a példa egy kördiagramot hoz létre alapértelmezett adatokkal, és exportálja a munkafüzetét. A kimeneti folyamot bezárja, mielőtt a külső munkafüzetet diagramadat‑forrásként beállítaná, majd elmenti a csatolt bemutatót.
from pathlib import Path
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.PIE, 50, 50, 400, 600)
workbook_path = str(Path("externalWorkbook1.xlsx").resolve())
workbook_stream = chart.chart_data.read_workbook_stream()
workbook_data = workbook_stream.read()
with open(workbook_path, "wb") as file_stream:
file_stream.write(workbook_data)
chart.chart_data.set_external_workbook(workbook_path)
presentation.save("externalWorkbook.pptx", slides.export.SaveFormat.PPTX)
Külső munkafüzet beállítása
A set_external_workbook metódussal külső munkafüzetet rendelhet egy diagramhoz adatforrásként. Ezzel a metódussal frissíthető a külső munkafüzettel való elérési út (ha az áthelyezésre került).
Miközben a távoli helyeken vagy erőforrásokban tárolt munkafüzetek adatait nem szerkeszthető közvetlenül, továbbra is használhatók külső adatforrásként. Ha relatív elérési utat ad meg egy külső munkafüzettel, azt automatikusan teljes elérési úttá alakítja a rendszer.
Ez a példa egy külső munkafüzetet használ, amelynek Sheet1 nevű munkalapja B1‑ben tartalmaz egy sorozatnevet, A2:A4‑ben kategórianév‑listát, és B2:B4‑ben számértékeket. A példa egy kördiagramot hoz létre, összekapcsolja a munkafüzetet, és a set_range segítségével az A1:B4‑et egy sorozatra és három kategóriára térképezi. A diagrammal együtt menti a bemutatót.
from pathlib import Path
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.PIE, 50, 50, 400, 600, True)
chart_data = chart.chart_data
workbook_path = str(Path("externalWorkbook.xlsx").resolve())
chart_data.set_external_workbook(workbook_path)
chart_data.set_range("Sheet1!$A$1:$B$4")
presentation.save("Presentation_with_externalWorkbook.pptx", slides.export.SaveFormat.PPTX)
A set_external_workbook update_chart_data paramétere szabályozza, hogy a munkafüzet be legyen‑töltve.
- Ha
update_chart_dataFalse, csak a munkafüzet elérési útja frissül. A diagramadatok nem töltődnek be vagy frissülnek a célmunkafüzetről, így a munkafüzet lehet, hogy nem is érhető el. - Ha
update_chart_dataTrue, a diagramadatok a célmunkafüzetről frissülnek.
Az alábbi példa egy helyettesítő URL‑t rendel hozzá update_chart_data értéke False. A kördiagram alapértelmezett adatai megmaradnak, és a bemutató mentésre kerül anélkül, hogy a nem elérhető munkafüzet betöltésre kerülne.
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.PIE, 50, 50, 400, 600, True)
chart.chart_data.set_external_workbook("https://example.com/unavailable-workbook.xlsx", False)
presentation.save("SetExternalWorkbookWithUpdateChartData.pptx", slides.export.SaveFormat.PPTX)
Diagram külső adatforrás‑munkafüzete elérési útjának lekérése
A diagramhoz csatolt munkafüzet azonosításához ellenőrizze, hogy a diagram külső adatforrást használ‑e, és szerezze meg annak munkafüzet‑elérési útját.
Ez a példa a bemutató első diájának első alakzatát vizsgálja, amely egy külső munkafüzettel csatolt diagram. Ha ez egy diagram, amely külső munkafüzettel van összekapcsolva, a példa kiírja a external_workbook_path értékét a konzolra, majd elmenti a bemutató egy másolatát.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("externalWorkbook.pptx") as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
chart_data = chart.chart_data
if chart_data.data_source_type == charts.ChartDataSourceType.EXTERNAL_WORKBOOK:
print(chart_data.external_workbook_path)
else:
print("The chart does not use an external workbook.")
else:
print("The first shape is not a chart.")
presentation.save("Result.pptx", slides.export.SaveFormat.PPTX)
Diagramadatok szerkesztése
A külső munkafüzet adatai szerkeszthetők ugyanúgy, ahogy a belső munkafüzet esetén. 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 az első alakzat, és egy hozzáférhető külső munkafüzettel van összekapcsolva. A első sorozat első adatpontjának cella‑alapú értékét 100‑ra állítja, és menti a frissített bemutatót. A cella értékek szerkesztése frissítheti a kapcsolt külső XLSX fájlt, ezért szükség esetén használjon másolatot, ha az eredeti munkafüzetet meg kell őrizni.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("presentation.pptx") as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
series = chart.chart_data.series
if len(series) > 0 and len(series[0].data_points) > 0:
value_cell = series[0].data_points[0].value.as_cell
if value_cell is not None:
value_cell.value = 100
presentation.save("presentation_out.pptx", slides.export.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.")
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 bemutatóban tárolt gyorsítótár‑adatokból. Hozzon létre egy LoadOptions objektumot, konfigurálja a spreadsheet_options beállítást, és állítsa a SpreadsheetOptions.recover_workbook_from_chart_cache értékét True‑re, mielőtt megnyitná a bemutatót.
Az alábbi Python‑példa helyreállítja a munkafüzet adatokat egy olyan diagramhoz, amely az első dián az első alakzat, és egy nem elérhető külső munkafüzettel hivatkozik. A helyreállított adatokat a Chart.chart_data és a ChartData.chart_data_workbook segítségével érheti el:
import aspose.slides as slides
import aspose.slides.charts as charts
load_options = slides.LoadOptions()
load_options.spreadsheet_options.recover_workbook_from_chart_cache = True
with slides.Presentation("presentation.pptx", load_options) as presentation:
slide = presentation.slides[0]
if len(slide.shapes) > 0 and isinstance(slide.shapes[0], charts.Chart):
chart = slide.shapes[0]
recovered_workbook = chart.chart_data.chart_data_workbook
# Olvassa vagy módosítsa a helyreállított munkafüzet adatait itt.
else:
print("The first shape is not a chart.")
Ha a külső munkafüzet nem elérhető és a helyreállítás le van tiltva, az Aspose.Slides kivételt dob. Engedélyezze a helyreállítást csak akkor, ha a gyorsítótár‑diagramadatok használata elfogadható tartalék, mivel a gyorsítótár nem tartalmazhatja a külső munkafüzetben a bemutató legutóbbi frissítése után történt változásokat.
GYIK
Meg tudom határozni, hogy egy adott diagram külső vagy beágyazott munkafüzettel van-e összekapcsolva?
Igen. A diagramnek van egy data source type és egy path to an external workbook; ha a forrás külső munkafüzet, akkor kiolvashatja a teljes elérési utat, hogy megbizonyosodjon egy külső fájl használatáról.
Támogatottak a relatív útvonalak a külső munkafüzetekhez, és hol tárolódnak?
Igen. Ha relatív útvonalat ad meg, az automatikusan átalakul abszolút útvonallá. A bemutató az abszolút útvonalat tárolja a PPTX fájlban, így a munkafüzet áthelyezésekor frissíteni kell a hivatkozást.
Használhatók hálózati erőforrások/ megosztásokon lévő munkafüzetek?
Igen, az ilyen munkafüzetek használhatók külső adatforrásként. Azonban a távoli munkafüzetek közvetlen szerkesztése az Aspose.Slides‑ből nem támogatott – csak forrásként használhatók.
Az Aspose.Slides felülírja a külső XLSX‑et a bemutató mentésekor?
A bemutató tárol egy link to the external file. A cellákra alapozott diagramadatok szerkesztése frissítheti a kapcsolt helyi XLSX fájlt. Ha az eredetit változatlanul kell hagyni, használjon másolatot a munkafüzetről.
Mit tegyek, ha a külső fájl jelszóval védett?
Az Aspose.Slides nem fogad el jelszót a csatoláshoz. Általános megoldás, hogy a védelmet előzetesen eltávolítja, vagy egy dekódolt másolatot készít (például az Aspose.Cells segítségével), és arra hivatkozik.
Több diagram hivatkozhat ugyanarra a külső munkafüzetre?
Igen. Minden diagram a saját hivatkozását tárolja. Ha mind ugyanarra a fájlra mutatnak, a fájl frissítése minden diagramnál megjelenik a következő alkalommal, amikor az adat betöltődik.

