Hantera diagramarbetsböcker i presentationer med Python via Java
Översikt
Den här artikeln förklarar hur man arbetar med diagramarbetsböcker i Aspose.Slides. Den visar hur man läser och skriver diagramdata via arbetsbokströmmar, använder arbetsblads-celler som diagramdatamärkningar, får åtkomst till arbetsbladsamlingar och anger datakälltyp för diagramvärden.
Den täcker även arbete med externa arbetsböcker som diagramdatakällor. Exemplen demonstrerar hur man skapar och tilldelar en extern arbetsbok, hämtar sökvägen till en extern arbetsbok som är länkad till ett diagram och redigerar diagramdata när arbetsboken är tillgänglig.
För arbetsblads-celler som representerar saknad data, se Kontrollera visning av tomma celler för skillnaden mellan en tom cell och noll, samt en linjediagramjämförelse av de tillgängliga visningslägena.
Inkludera data från dolda rader och kolumner
Använd Chart.setPlotVisibleCellsOnly för att styra om ett diagram plottar data från dolda arbetsbladsrader och -kolumner. Sätt den till True för att plotta endast synliga celler, eller False för att inkludera både synliga och dolda celler. Denna inställning styr diagrammets plotting; den döljer eller visar inte arbetsbladsrader eller -kolumner.
Exempelpresentationen innehåller ett stapeldiagram som den första formen på den första bilden. Det inbäddade arbetsbladet, Sheet1, innehåller följande källområde, A1:C4. Rad 3 och kolumn C är dolda, men deras celler innehåller fortfarande värden.
| Arbetsbladsrad | A: Månad | B: Detaljhandel | C: Partihandel (dolt kolumn) |
|---|---|---|---|
| 2 | Januari | 10 | 30 |
| 3 (dold rad) | Februari | 40 | 60 |
| 4 | Mars | 20 | 50 |
Få åtkomst till källceller via ChartData.getChartDataWorkbook och läs ChartDataCell.isHidden för att inspektera deras dolda status. Denna metod rapporterar den dolda statusen utan att ändra den. I detta exempel är B2 synlig, B3 tillhör den dolda raden och C2 tillhör den dolda kolumnen; exemplet skriver ut False, True och True respektive.
För detta exempel, uppdatera diagramdata efter att plottningsinställningen ändrats: behåll den inbäddade arbetsboken med readWorkbookStream och läs in den igen med writeWorkbookStream. När alla celler inkluderas, använd också setRange för att återställa hela området, inklusive den dolda februari-kategorin. Att bara ändra flaggan räcker inte för att uppdatera detta exempels cachade diagramdata och kategorimärkningar.
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)
# Uppdatera diagramdata från den inbäddade arbetsboken.
chart.getChartData().writeWorkbookStream(workbook_data)
if not visible_only:
# Återställ det kompletta källområdet, inklusive dolda kategorier.
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()
Exemplet sparar två versioner av presentationen: en med endast de synliga detaljhandelsvärdena (10 och 20), och en med alla sex värden. Bilderna nedan illustrerar de två plottningslägena. Rad 3 och kolumn C förblir dolda i båda inbäddade arbetsböckerna.
Endast synliga celler (True) |
Alla celler (False) |
|---|---|
![]() |
![]() |
En dold cell som innehåller ett värde är annorlunda än en tom cell. Chart.setDisplayBlanksAs styr hur saknade värden visas; den inkluderar eller exkluderar inte dold källdata. Se Kontrollera visning av tomma celler för ett exempel.
Hämta ett diagrams dataområde
Innan du uppdaterar arbetsboksdata i en befintlig presentation, inspektera källområdena för att identifiera vilka arbetsblads-celler varje diagram använder. Metoden ChartData.getRange returnerar det aktuella dataområdet som en arbetsblads‑kvalificerad formel, t.ex. Sheet1!$A$1:$D$5. Här är Sheet1 arbetsbladsnamnet, ! separerar det från cellområdet, och $A$1:$D$5 identifierar cellerna A1 till D5, inklusive. Dollartecknen indikerar absoluta rad‑ och kolumnreferenser.
Metoden läser det aktuella området utan att ändra diagrammet eller dess arbetsbok. Om diagrammet inte använder en arbetsbok som datakälla kastas InvalidOperationException. För mer information, se ChartData API‑referensen.
Detta exempel öppnar en presentation och kontrollerar formerna direkt på varje bild för diagram. Det skriver ut varje diagrams namn och källområde. Om ett diagram inte använder en arbetsbok, skriver det ett meddelande och går vidare till nästa diagram.
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()
Läsa och skriva diagramdata från en arbetsbok
Aspose.Slides for Python via Java tillhandahåller metoderna readWorkbookStream och writeWorkbookStream som låter dig läsa och skriva diagramarbetsböcker (innehållande diagramdata redigerad med Aspose.Cells). Obs att diagramdata måste vara organiserad på samma sätt eller ha en liknande struktur som källan.
Detta exempel använder en presentation med ett diagram som den första formen på den första bilden. Det läser in den inbäddade arbetsboken till en byte‑array, rensar befintliga serier och kategorier, och skriver tillbaka samma arbetsbok. Ändringarna finns kvar i minnet; exemplet sparar inte presentationen.
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()
Validera diagramlayout efter arbetsboksmodifiering
När du ersätter en inbäddad arbetsbok med en modifierad, behåller diagrammet sina ursprungliga serie‑ och kategorisamlingar. Detta kan göra att Chart.validateChartLayout misslyckas med ett index‑out‑of‑range‑fel. Rensa befintliga serier och kategorier innan du skriver tillbaka den uppdaterade arbetsboken till diagrammet. Detta exempel använder ett diagram som är den första formen på den första bilden. Kommentaren markerar var arbetsboksredigering skulle ske; det körbara exemplet skriver tillbaka den ursprungliga arbetsboken och validerar layouten i minnet.
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()
# Ändra arbetsbokens byte här, till exempel med Aspose.Cells.
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()
Att rensa samlingarna tar bort föråldrade datareferenser innan arbetsboken skrivs tillbaka. Bygg om eventuella nödvändiga serie‑ och kategorimappningar för den uppdaterade arbetsboken innan du använder diagrammet.
Ange anpassade talformat för arbetsblads‑celler
Använd ChartDataCell.setCustomNumberFormat för att styra hur numeriska värden visas i ett diagram’s inbäddade arbetsbok. Till exempel kan en rapport behöva en konverteringsgrad som visas som procent med fyra decimaler och en koefficient med fem decimaler. Behåll båda värdena som numeriska så att de förblir tillgängliga för beräkningar och diagramplotting.
Ett talformat ändrar bara visningen, inte det lagrade värdet. Formatet 0.0000% visar 0.125 som 12.5000%; det ersätter inte det lagrade talet med 12.5. På samma sätt visar 0.00000 0.1234567 som 0.12346 utan att runda det lagrade värdet. Om det anpassade formatet är en tom sträng (""), används formatet som returneras av getPresetNumberFormat i stället.
Följande exempel skapar ett stapeldiagram och får åtkomst till dess celler via getChartDataWorkbook. På arbetsblad 0 innehåller B2 konverteringsgraden och C2 koefficienten. Båda cellerna levererar diagramvärden. Exemplet aktiverar också värdemärkningar som är länkade till källformaten.
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()
Arbetsblads‑cellformat är separata från format som sätts direkt på diagramaxlar eller datamärkningar. I detta exempel visar varje märkning sitt källcellsvärde eftersom setShowValue är True, och följer källtalformatet eftersom setNumberFormatLinkedToSource är True. Efter att presentationen sparats och öppnats igen visar märkningarna 12.5000% och 0.12346, som visas nedan. Den vertikala axeln använder sitt eget talformat, tilldelat med setNumberFormat som 0.00, med setNumberFormatLinkedToSource satt till False.
För att formatera en datamärkning oberoende, sätt dess käll‑länk‑flagga till False och tilldela ett format med setNumberFormat. Detta ändrar inte arbetsblads‑cellens format. Till exempel visar ett oberoende märkningformat 0.00 det första värdet som 0.13, medan B2 fortfarande visar 12.5000%. Se Diagramdatamärkningar för direkt märkningformatering.
Bilden nedan renderades från den sparade presentationen efter att den öppnats igen:

Ange en arbetsblads‑cell som diagramdatamärkning
Du kan använda text från arbetsblads‑celler som diagramdatamärkningar.
Detta exempel lägger till ett bubbel‑diagram med standarddata på den första bilden i en befintlig presentation. Det använder cellerna A10:A12 på arbetsblad 0 för de första tre märkningarna i den första serien, aktiverar märkningar från celler och sparar den uppdaterade presentationen.
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()
Hantera arbetsblad
Metoden ChartDataWorkbook.getWorksheets ger åtkomst till arbetsbladen i en diagramarbetsbok. Detta exempel skapar ett cirkeldiagram med standarddata och skriver ut varje arbetsblads namn till konsolen.
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()
Ange datakälltyp
Serie‑punktsvärden kan också lagras direkt som numeriska literaler. Se Ange serievärden med numeriska literaler för ett komplett exempel som sparar och läser dem. Datakälltypen för punktvärden är separat från diagrammets interna eller externa arbetsboks‑konfiguration; att använda numeriska literaler tar inte automatiskt bort den inbäddade arbetsboken.
Detta exempel skapar ett 3D‑stapeldiagram med standarddata och anger två series‑namn med olika datakällor. Det första namnet använder en sträng‑literal; det andra använder cell C1 på arbetsblad 0. Uppräkningen DataSourceType väljer källan för varje namn. Exemplet sparar presentationen med de uppdaterade series‑namnen.
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()
Upptäck ej stödda inbäddade arbetsbokformat
Aspose.Slides stöder inte Excel‑binärarbetsboksformatet (.xlsb) som kan vara inbäddat i vissa diagram. Du kan använda metoden getEmbeddedWorkbookType på ChartData tillsammans med uppräkningen WorkbookType för att upptäcka ej stödda format och hoppa över dessa diagram. Detta exempel inspekterar formerna på den första bilden i en befintlig presentation, hoppar över icke‑diagramformer och skriver ut ett diagnostiskt meddelande för varje diagram med en inbäddad .xlsb‑arbetsbok.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.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
# Läs eller ändra stödd diagramarbetsboksdata här.
finally:
presentation.dispose()
Extern arbetsbok
Aspose.Slides stöder att använda externa arbetsböcker som datakälla för diagram.
Skapa en extern arbetsbok
Använd readWorkbookStream och setExternalWorkbook för att exportera en inbäddad diagramarbetsbok till en fil och länka diagrammet till den externa arbetsboken.
Detta exempel skapar ett cirkeldiagram med standarddata och exporterar dess arbetsbok. Det slutför filskrivningen innan den externa arbetsboken tilldelas som diagrammets datakälla, och sparar sedan den länkade presentationen.
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()
Tilldela en extern arbetsbok
Genom att använda metoden setExternalWorkbook kan du tilldela en extern arbetsbok till ett diagram som dess datakälla. Metoden kan även användas för att uppdatera en sökväg till den externa arbetsboken (om den senare har flyttats).
Även om du inte kan redigera data i arbetsböcker som lagras på fjärrplatser eller resurser, kan du fortfarande använda sådana arbetsböcker som extern datakälla. Om en relativ sökväg för en extern arbetsbok anges, konverteras den automatiskt till en fullständig sökväg.
Detta exempel använder en extern arbetsbok vars arbetsblad Sheet1 innehåller ett series namn i B1, kategorinamn i A2:A4 och numeriska värden i B2:B4. Exemplet skapar ett cirkeldiagram, länkar arbetsboken och använder setRange för att mappa A1:B4 till en serie och tre kategorier. Det sparar presentationen med det länkade diagrammet.
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()
Parametern updateChartData för setExternalWorkbook styr om arbetsboken laddas.
- När
updateChartDataärFalse, uppdateras endast arbetsbokens sökväg. Diagramdata laddas inte eller uppdateras från mål‑arbetsboken, så arbetsboken kan vara otillgänglig. - När
updateChartDataärTrue, uppdateras diagramdata från mål‑arbetsboken.
Följande exempel tilldelar en platshållar‑URL med updateChartData satt till False. Det behåller cirkeldiagrammets standarddata och sparar presentationen utan att ladda den otillgängliga arbetsboken.
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()
Hämta den externa datakällans arbetsbokssökväg för ett diagram
För att identifiera arbetsboken som är länkad till ett diagram, kontrollera om diagrammet använder en extern datakälla och hämta dess arbetsbokssökväg.
Detta exempel inspekterar den första formen på den första bilden i en presentation med en länkad extern arbetsbok. Om det är ett diagram som är länkat till en extern arbetsbok, skriver exemplet ut getExternalWorkbookPath till konsolen. Det sparar sedan en kopia av presentationen.
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()
Redigera diagramdata
Du kan redigera data i externa arbetsböcker på samma sätt som du gör ändringar i interna arbetsböcker. När en extern arbetsbok inte kan laddas kastas ett undantag.
Detta exempel använder ett diagram som är den första formen på den första bilden och som är länkat till en åtkomlig extern arbetsbok. Det sätter det cell‑bakade värdet för den första datapunkten i den första serien till 100 och sparar den uppdaterade presentationen. Att redigera cellvärden kan uppdatera den länkade externa XLSX‑filen, så använd en kopia om du måste bevara original‑arbetsboken.
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()
Återskapa en arbetsbok från diagram‑cachen
Om ett diagram använder en extern arbetsbok som saknas eller är otillgänglig, kan Aspose.Slides rekonstruera diagramarboken från data som cachats i presentationen. Skapa LoadOptions, anropa LoadOptions.setSpreadsheetOptions, och sätt SpreadsheetOptions.setRecoverWorkbookFromChartCache till True innan du öppnar presentationen.
Följande Python‑exempel återställer arbetsboksdata för ett diagram som är den första formen på den första bilden och som refererar till en otillgänglig extern arbetsbok. Det får åtkomst till den återställda datan via Chart.getChartData och ChartData.getChartDataWorkbook:
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()
# Läs eller ändra den återställda arbetsboksdata här.
else:
print("The first shape is not a chart.")
finally:
presentation.dispose()
Om den externa arbetsboken är otillgänglig och återställning är inaktiverad, kastar Aspose.Slides ett undantag. Aktivera återställning endast när användning av cachad diagramdata är ett acceptabelt alternativ, eftersom cachen kanske inte innehåller ändringar som gjorts i den externa arbetsboken efter att presentationen senast uppdaterades.
FAQ
Kan jag avgöra om ett specifikt diagram är länkat till en extern eller en inbäddad arbetsbok?
Ja. Ett diagram har en datakälltyp och en sökväg till en extern arbetsbok; om källan är en extern arbetsbok kan du läsa hela sökvägen för att säkerställa att en extern fil används.
Stöds relativa sökvägar till externa arbetsböcker, och hur lagras de?
Ja. Om du anger en relativ sökväg konverteras den automatiskt till en absolut sökväg. Presentationen lagrar den absoluta sökvägen i PPTX‑filen, så att flytta arbetsboken kan kräva en uppdatering av länken.
Kan jag använda arbetsböcker som finns på nätverksresurser/delade mappar?
Ja, sådana arbetsböcker kan användas som extern datakälla. Däremot stöds inte redigering av fjärrarbetsböcker direkt från Aspose.Slides – de kan endast användas som källa.
Överskriver Aspose.Slides den externa XLSX‑filen när presentationen sparas?
Presentationen lagrar en länk till den externa filen. Att redigera cell‑bakad diagramdata kan också uppdatera den länkade lokala XLSX‑filen. Använd en kopia av arbetsboken om originalet måste förbli oförändrat.
Vad bör jag göra om den externa filen är lösenordsskyddad?
Aspose.Slides accepterar inte ett lösenord vid länkning. En vanlig metod är att ta bort skyddet i förväg eller förbereda en avkrypterad kopia (t.ex. med Aspose.Cells) och länka till den kopian.
Kan flera diagram referera till samma externa arbetsbok?
Ja. Varje diagram lagrar sin egen länk. Om de alla pekar på samma fil, kommer en uppdatering av den filen att återspeglas i varje diagram nästa gång data laddas.

