Spravovat sešity grafů v prezentacích na Androidu
Přehled
Tento článek vysvětluje, jak pracovat s sešity grafů v Aspose.Slides. Ukazuje, jak číst a zapisovat data grafu přes proudy sešitu, používat buňky sešitu jako popisky dat grafu, přistupovat ke kolekcím listů a specifikovat typ zdroje dat pro hodnoty grafu.
Také zahrnuje práci s externími sešity jako zdroji dat grafu. Příklady ukazují, jak vytvořit a přiřadit externí sešit, získat cestu k externímu sešitu propojenému s grafem a upravit data grafu, když je sešit k dispozici.
Pro buňky sešitu, které představují chybějící data, viz Control the Display of Empty Cells pro rozdíl mezi prázdnou buňkou a nulou a porovnání režimů zobrazení u čárového grafu.
Zahrnout data ze skrytých řádků a sloupců
Použijte IChart.setPlotVisibleCellsOnly k ovládání, zda graf vykresluje data ze skrytých řádků a sloupců listu. Nastavte jej na true, aby se vykreslovaly pouze viditelné buňky, nebo na false, aby se zahrnovaly jak viditelné, tak skryté buňky. Toto nastavení řídí vykreslování grafu; neskryje ani neodkryje řádky nebo sloupce listu.
Ukázková prezentace obsahuje sloupcový graf jako první tvar na první snímku. Vložený list, Sheet1, obsahuje následující zdrojový rozsah A1:C4. Řádek 3 a sloupec C jsou skryté, ale jejich buňky stále obsahují hodnoty.
| Řádek listu | A: Měsíc | B: Maloobchod | C: Velkoobchod (skrytý sloupec) |
|---|---|---|---|
| 2 | Leden | 10 | 30 |
| 3 (skrytý řádek) | Únor | 40 | 60 |
| 4 | Březen | 20 | 50 |
Přístup k zdrojovým buňkám získáte přes IChartData.getChartDataWorkbook a přečtete IChartDataCell.isHidden pro kontrolu jejich skrytého stavu. Tato metoda vrací stav skrytí, aniž by jej měnila. V tomto souboru je B2 viditelná, B3 patří ke skrytému řádku a C2 ke skrytému sloupci; příklad vytiskne false, true a true.
Pro tento příklad obnovte data grafu po změně nastavení vykreslování: zachovejte vložený sešit pomocí readWorkbookStream a načtěte jej znovu pomocí writeWorkbookStream. Při zahrnutí všech buněk také použijte setRange k obnovení kompletního rozsahu, včetně skryté kategorie únor. Pouze změna příznaku není dostatečná k obnovení cachovaných dat grafu a popisků kategorií v tomto příkladu.
import com.aspose.slides.*;
Presentation presentation = new Presentation("hidden-source-data.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
int shapeCount = slide.getShapes().size();
if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
System.out.println("B2 hidden: " + workbook.getCell(0, "B2").isHidden());
System.out.println("B3 hidden: " + workbook.getCell(0, "B3").isHidden());
System.out.println("C2 hidden: " + workbook.getCell(0, "C2").isHidden());
byte[] workbookData = chart.getChartData().readWorkbookStream();
for (boolean visibleOnly : new boolean[] { true, false }) {
chart.setPlotVisibleCellsOnly(visibleOnly);
// Obnovit data grafu z vloženého sešitu.
chart.getChartData().writeWorkbookStream(workbookData);
if (!visibleOnly) {
// Obnovit kompletní zdrojový rozsah, včetně skrytých kategorií.
chart.getChartData().setRange("Sheet1!$A$1:$C$4");
}
presentation.save("hidden_cells_" + visibleOnly + ".pptx", SaveFormat.Pptx);
}
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Příklad uloží dvě verze prezentace: jednu pouze s viditelnými hodnotami maloobchodu (10 a 20) a druhou se všemi šesti hodnotami. Obrázky níže ilustrují dva režimy vykreslování. Řádek 3 a sloupec C zůstávají skryté v obou vložených sešitech.
Pouze viditelné buňky (true) |
Všechny buňky (false) |
|---|---|
![]() |
![]() |
Skrytá buňka obsahující hodnotu se liší od prázdné buňky. IChart.setDisplayBlanksAs řídí, jak jsou zobrazovány chybějící hodnoty; neovlivňuje zahrnutí nebo vyloučení skrytých zdrojových dat. Viz Control the Display of Empty Cells pro příklad.
Získat rozsah dat grafu
Před aktualizací dat sešitu v existující prezentaci si prohlédněte zdrojové rozsahy, abyste zjistili, které buňky listu každý graf používá. Metoda IChartData.getRange vrací aktuální rozsah dat jako formuli kvalifikovanou listem, například Sheet1!$A$1:$D$5. Zde Sheet1 je název listu, ! jej odděluje od rozsahu buněk a $A$1:$D$5 určuje buňky A1 až D5 včetně. Znaky $ označují absolutní odkazy na řádky a sloupce.
Metoda načte aktuální rozsah, aniž by měnila graf nebo jeho sešit. Pokud graf nepoužívá sešit jako zdroj dat, vyvolá výjimku InvalidOperationException. Další informace naleznete v ChartData API Reference.
Tento příklad otevře prezentaci a kontroluje tvary přímo na každém snímku, zda jsou grafy. Vytiskne název každého grafu a jeho zdrojový rozsah. Pokud graf nepoužívá sešit, vytiskne zprávu a pokračuje dalším grafem.
import com.aspose.slides.*;
import com.aspose.slides.exceptions.InvalidOperationException;
Presentation presentation = new Presentation("presentation.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
for (IShape shape : slide.getShapes()) {
if (shape instanceof IChart) {
IChart chart = (IChart) shape;
try {
String range = chart.getChartData().getRange();
System.out.println(chart.getName() + ": " + range);
} catch (InvalidOperationException exception) {
System.out.println(chart.getName() + ": The chart does not use a workbook as its data source.");
}
}
}
}
} finally {
presentation.dispose();
}
Číst a zapisovat data grafu ze sešitu
Aspose.Slides for Android via Java poskytuje metody readWorkbookStream a writeWorkbookStream, které umožňují číst a zapisovat sešity dat grafu (obsahující data grafu upravená pomocí Aspose.Cells). Poznámka: data grafu musí být uspořádána stejným způsobem nebo mít strukturu podobnou zdroji.
Tento příklad používá prezentaci s grafem jako první tvar na první snímku. Načte vložený sešit do pole bajtů, vyprázdní existující řady a kategorie a zapíše stejný sešit zpět. Změny zůstávají v paměti; příklad prezentaci neukládá.
import com.aspose.slides.*;
Presentation presentation = new Presentation("chart.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
int shapeCount = slide.getShapes().size();
if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartData chartData = chart.getChartData();
byte[] workbookData = chartData.readWorkbookStream();
chartData.getSeries().clear();
chartData.getCategories().clear();
chartData.writeWorkbookStream(workbookData);
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Validovat rozvržení grafu po úpravě sešitu
Když nahradíte vložený sešit upraveným, graf si ponechá původní kolekce řad a kategorií. Tento nesoulad může způsobit selhání IChart.validateChartLayout s chybou index mimo rozsah. Vyprázdněte existující řady a kategorie před zápisem aktualizovaného sešitu zpět do grafu. Tento příklad používá graf, který je první tvar na první snímku. Komentář označuje místo, kde by se úprava sešitu prováděla; spustitelný příklad zapíše původní sešit zpět a validuje rozvržení v paměti.
import com.aspose.slides.*;
Presentation presentation = new Presentation("chart.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
int shapeCount = slide.getShapes().size();
if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartData chartData = chart.getChartData();
byte[] workbookData = chartData.readWorkbookStream();
// Upravte bajty sešitu zde, například pomocí Aspose.Cells.
chartData.getSeries().clear();
chartData.getCategories().clear();
chartData.writeWorkbookStream(workbookData);
chart.validateChartLayout();
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Vyprázdnění kolekcí odstraní zastaralé odkazy na data před zápisem sešitu. Před použitím grafu znovu sestavte požadované mapování řad a kategorií pro aktualizovaný sešit.
Nastavit vlastní formáty čísel pro buňky sešitu
Použijte IChartDataCell.setCustomNumberFormat k řízení, jak číselné hodnoty vypadají v vloženém sešitu grafu. Například zpráva může požadovat konverzní poměr zobrazený jako procento se čtyřmi desetinnými místy a koeficient zobrazený s pěti desetinnými místy. Udržujte obě hodnoty číselné, aby zůstaly použitelné pro výpočty a vykreslování grafu.
Formát čísla mění pouze zobrazení, ne uloženou hodnotu. Formát 0.0000% zobrazí 0.125 jako 12.5000%; nenahradí uložené číslo hodnotou 12.5. Podobně 0.00000 zobrazí 0.1234567 jako 0.12346 bez zaokrouhlení uložené hodnoty. Pokud je vlastní formát prázdný řetězec (""), použije se formát vrácený metodou getPresetNumberFormat.
V následujícím příkladu se vytvoří sloupcový graf a přistoupí se k jeho buňkám přes getChartDataWorkbook. Na listu 0 obsahuje B2 konverzní poměr a C2 koeficient. Obě buňky dodávají hodnoty grafu. Příklad také povolí popisky hodnot spojené se zdrojovými formáty.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
presentation.getSlideSize().setSize(720, 270, SlideSizeScaleType.DoNotScale);
ISlide slide = presentation.getSlides().get_Item(0);
IChart 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();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartDataCell categoryCell = workbook.getCell(0, "A2", "Sample");
chart.getChartData().getCategories().add(categoryCell);
IChartDataCell percentageCell = workbook.getCell(0, "B2", 0.125);
percentageCell.setCustomNumberFormat("0.0000%");
IChartDataCell percentageName = workbook.getCell(0, "B1", "Conversion rate");
IChartSeries percentageSeries = chart.getChartData().getSeries().add(percentageName, chart.getType());
percentageSeries.getDataPoints().addDataPointForBarSeries(percentageCell);
IChartDataCell precisionCell = workbook.getCell(0, "C2", 0.1234567);
precisionCell.setCustomNumberFormat("0.00000");
IChartDataCell precisionName = workbook.getCell(0, "C1", "Coefficient");
IChartSeries precisionSeries = chart.getChartData().getSeries().add(precisionName, chart.getType());
precisionSeries.getDataPoints().addDataPointForBarSeries(precisionCell);
for (IChartSeries series : chart.getChartData().getSeries()) {
IDataLabelFormat labelFormat = series.getDataPoints().get_Item(0).getLabel().getDataLabelFormat();
labelFormat.setShowValue(true);
labelFormat.setNumberFormatLinkedToSource(true);
}
presentation.save("CustomCellFormats.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Formáty buněk sešitu jsou oddělené od formátů nastavených přímo na osách grafu nebo popiscích dat. V tomto příkladu každý popisek zobrazuje hodnotu své zdrojové buňky, protože setShowValue je nastaven na true a setNumberFormatLinkedToSource je nastaven na true. Po uložení a opětovném otevření prezentace popisky zobrazí 12.5000% a 0.12346, jak je ukázáno níže. Vertikální osa používá vlastní formát čísla, nastavený pomocí setNumberFormat na 0.00, přičemž setNumberFormatLinkedToSource je nastaven na false.
Pro nezávislé formátování popisku nastavte jeho příznak propojení se zdrojem na false a přiřaďte formát pomocí setNumberFormat. Tím se nezmění formát buňky sešitu. Například nezávislý formát popisku 0.00 zobrazí první hodnotu jako 0.13, zatímco B2 stále zobrazuje 12.5000%. Viz Chart Data Labels pro přímé formátování popisků.
Obrázek níže byl vygenerován ze uložené prezentace po jejím opětovném otevření:

Nastavit buňku sešitu jako popisek dat grafu
Můžete použít text z buněk sešitu jako popisky dat grafu.
Tento příklad přidá bublinový graf s výchozími daty na první snímek existující prezentace. Používá buňky A10:A12 na listu 0 pro první tři popisky v první řadě, povolí popisky z buněk a uloží aktualizovanou prezentaci.
import com.aspose.slides.*;
Presentation presentation = new Presentation("chart2.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Bubble, 50, 50, 600, 400, true);
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
series.getLabels().getDefaultDataLabelFormat().setShowLabelValueFromCell(true);
series.getLabels().get_Item(0).setValueFromCell(workbook.getCell(0, "A10", "Label 0 cell value"));
series.getLabels().get_Item(1).setValueFromCell(workbook.getCell(0, "A11", "Label 1 cell value"));
series.getLabels().get_Item(2).setValueFromCell(workbook.getCell(0, "A12", "Label 2 cell value"));
presentation.save("resultchart.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Správa listů
Metoda IChartDataWorkbook.getWorksheets poskytuje přístup k listům v sešitu grafu. Tento příklad vytvoří koláčový graf s výchozími daty a vytiskne každý název listu do konzole.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 500);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
for (int i = 0; i < workbook.getWorksheets().size(); i++) {
System.out.println(workbook.getWorksheets().get_Item(i).getName());
}
} finally {
presentation.dispose();
}
Specifikovat typ zdroje dat
Hodnoty bodů řady mohou být také uloženy přímo jako číselné literály. Viz Set Series Values Using Numeric Literals pro kompletní příklad, který je ukládá a čte. Typ zdroje hodnot bodů je oddělený od interního nebo externího nastavení sešitu grafu; použití číselných literálů samo o sobě neodstraní vložený sešit.
Tento příklad vytvoří 3D sloupcový graf s výchozími daty a nastaví dva názvy řad pomocí různých zdrojů dat. První název používá řetězcový literál; druhý používá buňku C1 na listu 0. Výčtový typ DataSourceType vybírá zdroj pro každý název. Příklad uloží prezentaci s aktualizovanými názvy řad.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Column3D, 50, 50, 600, 400, true);
IStringChartValue literalName = chart.getChartData().getSeries().get_Item(0).getName();
literalName.setDataSourceType(DataSourceType.StringLiterals);
literalName.setData("LiteralString");
IStringChartValue cellName = chart.getChartData().getSeries().get_Item(1).getName();
IChartDataCell nameCell = chart.getChartData().getChartDataWorkbook().getCell(0, "C1", "NewCell");
cellName.setDataSourceType(DataSourceType.Worksheet);
cellName.setData(nameCell);
presentation.save("pres.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Detekovat nepodporované formáty vložených sešitů
Aspose.Slides nepodporuje formát binárního sešitu Excel (.xlsb), který může být vložen v některých grafech. Můžete použít metodu getEmbeddedWorkbookType na rozhraní IChartData spolu s výčtem WorkbookType k detekci nepodporovaných formátů a přeskočit tyto grafy. Tento příklad prověřuje tvary na první snímku existující prezentace, přeskočí tvary, které nejsou grafy, a vytiskne diagnostickou zprávu pro každý graf s vloženým sešitem .xlsb.
import com.aspose.slides.*;
Presentation presentation = new Presentation("sample.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
for (IShape shape : slide.getShapes()) {
if (!(shape instanceof IChart)) {
continue;
}
IChart chart = (IChart) shape;
IChartData chartData = chart.getChartData();
boolean isInternalWorkbook = chartData.getDataSourceType() == ChartDataSourceType.InternalWorkbook;
boolean isBinaryMacro = chartData.getEmbeddedWorkbookType() == WorkbookType.WorkbookBinaryMacro;
if (isInternalWorkbook && isBinaryMacro) {
System.out.println("Skipping a chart with an unsupported .xlsb workbook.");
continue;
}
// Přečtěte nebo upravte podporovaná data sešitu grafu zde.
}
} finally {
presentation.dispose();
}
Externí sešit
Aspose.Slides podporuje použití externích sešitů jako zdroje dat pro grafy.
Vytvořit externí sešit
Použijte readWorkbookStream a setExternalWorkbook k exportu vloženého sešitu grafu do souboru a propojení grafu s tímto externím sešitem.
Tento příklad vytvoří koláčový graf s výchozími daty a exportuje jeho sešit. Dokončí zápis souboru před přiřazením externího sešitu jako zdroje dat grafu, poté uloží propojenou prezentaci.
import com.aspose.slides.*;
import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600);
File workbookFile = new File("externalWorkbook1.xlsx").getAbsoluteFile();
byte[] workbookData = chart.getChartData().readWorkbookStream();
try {
try (FileOutputStream workbookStream = new FileOutputStream(workbookFile)) {
workbookStream.write(workbookData);
}
chart.getChartData().setExternalWorkbook(workbookFile.getAbsolutePath());
presentation.save("externalWorkbook.pptx", SaveFormat.Pptx);
} catch (IOException exception) {
System.out.println("Could not write the external workbook: " + exception.getMessage());
}
} finally {
presentation.dispose();
}
Nastavit externí sešit
Pomocí metody setExternalWorkbook můžete přiřadit externí sešit grafu jako jeho zdroj dat. Tato metoda může být také použita k aktualizaci cesty k externímu sešitu (pokud byl přesunut).
I když nemůžete upravovat data v sešitech uložených na vzdálených místech nebo v prostředcích, můžete takové sešity stále použít jako externí zdroj dat. Pokud je poskytnuta relativní cesta k externímu sešitu, automaticky se převede na úplnou cestu.
Tento příklad používá externí sešit, jehož list s názvem Sheet1 obsahuje název řady v B1, názvy kategorií v A2:A4 a číselné hodnoty v B2:B4. Příklad vytvoří koláčový graf, propojí sešit a použije setRange k mapování A1:B4 na jednu řadu a tři kategorie. Uloží prezentaci s propojeným grafem.
import com.aspose.slides.*;
import java.io.File;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, true);
IChartData chartData = chart.getChartData();
File workbookFile = new File("externalWorkbook.xlsx");
String workbookPath = workbookFile.getAbsolutePath();
chartData.setExternalWorkbook(workbookPath);
chartData.setRange("Sheet1!$A$1:$B$4");
presentation.save("Presentation_with_externalWorkbook.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Parametr updateChartData metody setExternalWorkbook řídí, zda se sešit načte.
- Když je
updateChartDatafalse, aktualizuje se pouze cesta k sešitu. Data grafu se nenačtou ani neaktualizují z cílového sešitu, takže sešit může být nedostupný. - Když je
updateChartDatatrue, data grafu se aktualizují z cílového sešitu.
Následující příklad přiřadí zástupnou URL s updateChartData nastaveným na false. Zachová výchozí data koláčového grafu a uloží prezentaci bez načítání nedostupného sešitu.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.Pie, 50, 50, 400, 600, true);
chart.getChartData().setExternalWorkbook("https://example.com/unavailable-workbook.xlsx", false);
presentation.save("SetExternalWorkbookWithUpdateChartData.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Získat cestu k externímu sešitu zdroje dat grafu
Pro identifikaci sešitu propojeného s grafem zkontrolujte, zda graf používá externí zdroj dat a načtěte jeho cestu.
Tento příklad prověří první tvar na první snímku prezentace s externím propojeným sešitem. Pokud se jedná o graf propojený s externím sešitem, vytiskne na konzoli getExternalWorkbookPath. Poté uloží kopii prezentace.
import com.aspose.slides.*;
Presentation presentation = new Presentation("externalWorkbook.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
if (slide.getShapes().size() > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartData chartData = chart.getChartData();
if (chartData.getDataSourceType() == ChartDataSourceType.ExternalWorkbook) {
System.out.println(chartData.getExternalWorkbookPath());
} else {
System.out.println("The chart does not use an external workbook.");
}
} else {
System.out.println("The first shape is not a chart.");
}
presentation.save("Result.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Upravit data grafu
Můžete upravovat data v externích sešitech stejným způsobem, jako měníte obsah interních sešitů. Když externí sešit není možné načíst, vyvolá se výjimka.
Tento příklad používá graf, který je první tvar na první snímku a je propojen s přístupným externím sešitem. Nastaví hodnotu první datové bodu první řady na 100 a uloží aktualizovanou prezentaci. Úprava hodnot buněk může aktualizovat propojený externí soubor XLSX, proto použijte kopii, pokud potřebujete zachovat původní sešit.
import com.aspose.slides.*;
Presentation presentation = new Presentation("presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
int shapeCount = slide.getShapes().size();
if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartSeriesCollection series = chart.getChartData().getSeries();
if (series.size() > 0 && series.get_Item(0).getDataPoints().size() > 0) {
IChartDataCell valueCell = series.get_Item(0).getDataPoints().get_Item(0).getValue().getAsCell();
if (valueCell != null) {
valueCell.setValue(100);
presentation.save("presentation_out.pptx", SaveFormat.Pptx);
} else {
System.out.println("The first data point is not linked to a workbook cell.");
}
} else {
System.out.println("The chart has no data points to edit.");
}
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Obnovit sešit z mezipaměti grafu
Pokud graf používá externí sešit, který chybí nebo není dostupný, Aspose.Slides může rekonstruovat sešit grafu z dat uložených v mezipaměti prezentace. Vytvořte LoadOptions, zavolejte LoadOptions.setSpreadsheetOptions a nastavte ISpreadsheetOptions.setRecoverWorkbookFromChartCache na true před otevřením prezentace.
Následující Java příklad obnoví data sešitu pro graf, který je první tvar na první snímku a odkazuje na nedostupný externí sešit. Přistupuje k obnoveným datům přes IChart.getChartData a IChartData.getChartDataWorkbook:
import com.aspose.slides.*;
SpreadsheetOptions spreadsheetOptions = new SpreadsheetOptions();
spreadsheetOptions.setRecoverWorkbookFromChartCache(true);
LoadOptions loadOptions = new LoadOptions();
loadOptions.setSpreadsheetOptions(spreadsheetOptions);
Presentation presentation = new Presentation("presentation.pptx", loadOptions);
try {
ISlide slide = presentation.getSlides().get_Item(0);
int shapeCount = slide.getShapes().size();
if (shapeCount > 0 && slide.getShapes().get_Item(0) instanceof IChart) {
IChart chart = (IChart) slide.getShapes().get_Item(0);
IChartDataWorkbook recoveredWorkbook = chart.getChartData().getChartDataWorkbook();
// Přečtěte nebo upravte zde obnovená data sešitu.
} else {
System.out.println("The first shape is not a chart.");
}
} finally {
presentation.dispose();
}
Pokud je externí sešit nedostupný a obnova je vypnutá, Aspose.Slides vyvolá výjimku. Povolit obnovu použijte jen tehdy, když je použití cachovaných dat grafu přijatelnou náhradou, protože mezipaměť nemusí obsahovat změny provedené v externím sešitu po poslední aktualizaci prezentace.
Často kladené otázky
Mohu zjistit, zda je konkrétní graf propojen s externím nebo vloženým sešitem?
Ano. Graf má data source type a cestu k externímu sešitu; pokud je zdrojem externí sešit, můžete přečíst úplnou cestu a ujistit se, že je použit externí soubor.
Jsou podporovány relativní cesty k externím sešitům a jak jsou uloženy?
Ano. Pokud zadáte relativní cestu, automaticky se převede na absolutní cestu. Prezentace ukládá absolutní cestu v souboru PPTX, takže při přesunu sešitu může být nutné aktualizovat odkaz.
Mohu použít sešity umístěné na síťových zdrojích/sdílených složkách?
Ano, takové sešity lze použít jako externí zdroj dat. Úprava vzdálených sešitů přímo z Aspose.Slides však není podporována – mohou být použity jen jako zdroj.
Přepisuje Aspose.Slides externí XLSX při ukládání prezentace?
Prezentace ukládá link to the external file. Úprava dat grafu, která jsou založena na buňkách, může také aktualizovat propojený lokální soubor XLSX. Použijte kopii sešitu, pokud musí originál zůstat beze změny.
Co dělat, pokud je externí soubor chráněn heslem?
Aspose.Slides neakceptuje heslo při vytváření odkazu. Běžný postup je odstranit ochranu předem nebo připravit dešifrovanou kopii (například pomocí Aspose.Cells) a odkazovat na tuto kopii.
Mohou více grafů odkazovat na stejný externí sešit?
Ano. Každý graf ukládá svůj vlastní odkaz. Pokud všechny odkazují na stejný soubor, aktualizace tohoto souboru bude odrážena v každém grafu při dalším načtení dat.

