Beheer diagram-werkboeken in presentaties met Python

Overzicht

Dit artikel legt uit hoe u met diagram‑werkboeken in Aspose.Slides kunt werken. Het laat zien hoe u diagramgegevens kunt lezen en schrijven via werkboek‑streams, werkboek‑cellen als diagram‑datumbalken kunt gebruiken, toegang krijgt tot werkbladcollecties en het type gegevensbron voor diagramwaarden kunt opgeven.

Het behandelt tevens het werken met externe werkboeken als diagram‑gegevensbronnen. De voorbeelden demonstreren hoe u een extern werkboek maakt en toewijst, het pad van een extern werkboek dat aan een diagram is gekoppeld opvraagt, en diagramgegevens bewerkt wanneer het werkboek beschikbaar is.

Diagramgegevens lezen en schrijven vanuit een werkboek

Aspose.Slides biedt methoden om diagram‑gegevenswerkboeken te lezen en te schrijven (die diagramgegevens bevatten die met Aspose.Cells zijn bewerkt). Opmerking: De diagramgegevens moeten op dezelfde manier zijn georganiseerd of een structuur hebben die vergelijkbaar is met de bron.

De volgende Python‑code toont een voorbeeldbewerking:

import aspose.slides as slides

with slides.Presentation("chart.pptx") as presentation:
    chart = presentation.slides[0].shapes[0]

    data_stream = chart.chart_data.read_workbook_stream()

    chart.chart_data.series.clear()
    chart.chart_data.categories.clear()

    data_stream.seek(0)
    chart.chart_data.write_workbook_stream(data_stream)

Een werkboekcel instellen als diagramdatumbalk

Soms heeft u diagram‑labels nodig die rechtstreeks uit cellen in het onderliggende gegevens‑werkboek komen. Aspose.Slides maakt het mogelijk om datalabels te binden aan specifieke werkboekcellen zodat de labeltekst altijd de waarde van de cel weergeeft. Het voorbeeld hieronder laat zien hoe u labels uit cellen inschakelt en geselecteerde labels naar aangepaste cellen in het werkboek van het diagram laat wijzen.

  1. Maak een instantie van de Presentation‑klasse.
  2. Verkrijg een referentie naar de dia op index.
  3. Voeg een bol‑diagram toe met voorbeeldgegevens.
  4. Toegang tot de diagramreeks.
  5. Gebruik een werkboekcel als datalabel.
  6. Sla de presentatie op.

De volgende Python‑code toont hoe u een werkboekcel als diagramdatumbalk instelt:

import aspose.slides as slides
import aspose.slides.charts as charts

# Instantieer de Presentation‑klasse die een presentatie‑bestand vertegenwoordigt.
with slides.Presentation() 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]

    series.labels.default_data_label_format.show_label_value_from_cell = True

    workbook = chart.chart_data.chart_data_workbook

    series.labels[0].value_from_cell = workbook.get_cell(0, "A10", "Label 0")
    series.labels[1].value_from_cell = workbook.get_cell(0, "A11", "Label 1")
    series.labels[2].value_from_cell = workbook.get_cell(0, "A12", "Label 2")

    presentation.save("chart.pptx", slides.export.SaveFormat.PPTX)

Werkbladen beheren

De volgende Python‑code laat zien hoe u de eigenschap worksheets gebruikt om toegang te krijgen tot de werkbladcollectie:

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 i in range(len(workbook.worksheets)):
        print(workbook.worksheets[i].name)

Het type gegevensbron opgeven

De volgende Python‑code laat zien hoe u een type gegevensbron opgeeft:

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)

    series_name = chart.chart_data.series[0].name
    series_name.data_source_type = slides.charts.DataSourceType.STRING_LITERALS
    series_name.data = "LiteralString"

    series_name = chart.chart_data.series[1].name
    series_name.data = chart.chart_data.chart_data_workbook.get_cell(0, "B1", "NewCell")

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

Detecteren van niet‑ondersteunde ingebedde werkboekformaten

Aspose.Slides ondersteunt het Excel‑binaire werkboekformaat (.xlsb) niet, dat in sommige diagrammen kan worden ingebed. U kunt de eigenschap embedded_workbook_type op ChartData combineren met de enumeratie WorkbookType om niet‑ondersteunde formaten te detecteren en die diagrammen over te slaan.

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 = shape
        chart_data = chart.chart_data

        if (chart_data.data_source_type == charts.ChartDataSourceType.INTERNAL_WORKBOOK and
                chart_data.embedded_workbook_type == charts.WorkbookType.WORKBOOK_BINARY_MACRO):
            # Ingebed werkboek is in .xlsb-formaat, wat niet wordt ondersteund.
            continue

        # Lees of wijzig hier de diagram-werkboekgegevens.

Externe werkboeken

Aspose.Slides ondersteunt het gebruik van externe werkboeken als gegevensbron voor diagrammen.

Externe werkboeken instellen

Met de methode ChartData.set_external_workbook kunt u een extern werkboek toewijzen aan een diagram als gegevensbron. Deze methode kan ook het pad naar een extern werkboek bijwerken wanneer het is verplaatst.

Hoewel u gegevens in werkboeken die op externe locaties of bronnen staan niet kunt bewerken, kunt u die werkboeken wel als externe gegevensbronnen gebruiken. Wanneer u een relatief pad opgeeft voor een extern werkboek, wordt dit automatisch omgezet naar een volledig pad.

De volgende Python‑code toont hoe u een extern werkboek instelt:

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, False)
    chart.chart_data.set_external_workbook("external_workbook.xlsx")

    presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)

De parameter update_chart_data van de methode set_external_workbook geeft aan of het Excel‑werkboek zal worden geladen.

  • Wanneer update_chart_data is ingesteld op False, wordt alleen het werkboekpad bijgewerkt; de diagramgegevens worden niet geladen of ververst vanuit het doel‑werkboek. Gebruik deze instelling wanneer het doel‑werkboek niet bestaat of niet beschikbaar is.
  • Wanneer update_chart_data is ingesteld op True, worden de diagramgegevens geladen en bijgewerkt vanuit het doel‑werkboek.

Externe werkboeken maken

Met de methoden read_workbook_stream en set_external_workbook kunt u een extern werkboek vanaf nul maken of een intern werkboek omzetten naar een extern werkboek.

Deze Python‑code demonstreert het proces van het maken van een extern werkboek:

import pathlib
import aspose.slides as slides
import aspose.slides.charts as charts

workbook_path = "external_workbook.xlsx"

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.PIE, 50, 50, 400, 600)

    workbook_data = chart.chart_data.read_workbook_stream().read()

    with open(workbook_path, "wb") as file_stream:
        file_stream.write(workbook_data)

    full_path = str(pathlib.Path(workbook_path).resolve())
    chart.chart_data.set_external_workbook(full_path)

    presentation.save("chart_with_external_workbook.pptx", slides.export.SaveFormat.PPTX)

Het pad van de externe gegevensbron‑werkboek voor een diagram opvragen

Soms is de gegevensbron van een diagram gekoppeld aan een extern Excel‑werkboek in plaats van aan de ingebedde gegevens van de presentatie. Met Aspose.Slides kunt u de gegevensbron van het diagram inspecteren en, indien het een extern werkboek betreft, het volledige werkboekpad lezen.

  1. Maak een instantie van de Presentation‑klasse.
  2. Verkrijg een referentie naar de dia op zijn index.
  3. Verkrijg een referentie naar de diagramvorm.
  4. Haal de bron (ChartDataSourceType) op die de diagram‑gegevensbron vertegenwoordigt.
  5. Controleer of het bron‑type overeenkomt met het type externe werkboek‑gegevensbron.

De volgende Python‑code demonstreert deze bewerking:

import aspose.slides as slides
import aspose.slides.charts as charts

with slides.Presentation("chart_with_external_workbook.pptx") as presentation:
    chart = presentation.slides[0].shapes[0]
    source_type = chart.chart_data.data_source_type
    if source_type == charts.ChartDataSourceType.EXTERNAL_WORKBOOK:
        print(chart.chart_data.external_workbook_path)

Diagramgegevens bewerken

U kunt gegevens in externe werkboeken bewerken op dezelfde manier als u gegevens in interne werkboeken bewerkt. Als een extern werkboek niet kan worden geladen, wordt er een uitzondering opgegooid.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    chart = presentation.slides[0].shapes[0]
    chart.chart_data.series[0].data_points[0].value.as_cell.value = 100
    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

FAQ

Kan ik bepalen of een specifiek diagram gekoppeld is aan een extern of een ingebed werkboek?

Ja. Een diagram heeft een data source type en een pad naar een extern werkboek; als de bron een extern werkboek is, kunt u het volledige pad lezen om te bevestigen dat een extern bestand wordt gebruikt.

Worden relatieve paden naar externe werkboeken ondersteund, en hoe worden ze opgeslagen?

Ja. Als u een relatief pad opgeeft, wordt dit automatisch omgezet naar een absoluut pad. Dit is handig voor project‑portabiliteit; houd er echter rekening mee dat de presentatie het absolute pad opslaat in het PPTX‑bestand.

Kan ik werkboeken gebruiken die zich op netwerkbronnen of -shares bevinden?

Ja, dergelijke werkboeken kunnen worden gebruikt als externe gegevensbron. Het direct bewerken van externe werkboeken vanuit Aspose.Slides wordt echter niet ondersteund – ze kunnen alleen als bron worden gebruikt.

Schrijft Aspose.Slides het externe XLSX‑bestand over bij het opslaan van de presentatie?

Nee. De presentatie slaat een link naar het externe bestand op en gebruikt die voor het lezen van de gegevens. Het externe bestand zelf wordt niet gewijzigd wanneer de presentatie wordt opgeslagen.

Wat moet ik doen als het externe bestand met een wachtwoord beschermd is?

Aspose.Slides accepteert geen wachtwoord bij het koppelen. Een gebruikelijke aanpak is om de bescherming vooraf te verwijderen of een ontsleutelde kopie voor te bereiden (bijvoorbeeld met Aspose.Cells) en naar die kopie te linken.

Kunnen meerdere diagrammen naar hetzelfde externe werkboek verwijzen?

Ja. Elk diagram slaat zijn eigen link op. Als ze allemaal naar hetzelfde bestand wijzen, wordt een wijziging in dat bestand bij de volgende gegevens‑lading weerspiegeld in elk diagram.