Integrovat data z Excelu do prezentací PowerPoint
Úvod
Prezentace PowerPoint jsou výkonným způsobem, jak zobrazovat a komunikovat informace. Často se používají společně se sešity Excel, kde Excel slouží jako vynikající zdroj strukturovaných dat a PowerPoint vyniká při vizualizaci těchto dat pro publikum.
Existuje mnoho praktických scénářů, kde je kombinace Excelu a PowerPointu nezbytná: hromadná korespondence, naplňování datových tabulek, generování jednoho slidu na každý datový záznam (dávkové vytváření slidů), vytváření výukových materiálů a konsolidace několika Excelových zpráv do jedné prezentace, jen vyjmenovat několik.
Dosud vyžadovalo implementaci takových funkcí pomocí API Aspose.Slides spoléhat na řešení třetích stran, jako je Aspose.Cells. Přestože jsou tyto nástroje robustní, mohou být pro uživatele, kteří potřebují pouze základní funkčnost integrace dat, příliš složité a nákladné.
Jak to funguje
Aby bylo práce s daty Excel jednodušší a efektivnější, Aspose.Slides představila nové třídy pro čtení dat ze sešitů Excel a importování obsahu do prezentace. Tato funkce otevírá výkonné nové možnosti pro uživatele API, kteří chtějí využívat Excel jako zdroj dat ve svých pracovních postupech s prezentacemi.
Nová funkčnost je navržena pro obecný přístup k datům a není integrována do objektového modelu dokumentu prezentace (DOM). To znamená, že neumožňuje upravovat ani ukládat soubory Excel — jejím jediným účelem je otevírat sešity a procházet jejich obsah za účelem získání dat buněk.
Jádrem této funkce je nová třída ExcelDataWorkbook. Tato třída vám umožňuje načíst sešit Excel z lokálního souboru nebo proudu. Po načtení poskytuje několik přetížení metody getCell, kterou můžete použít k získání konkrétních buněk podle jejich umístění (např. indexy řádku a sloupce nebo pojmenované oblasti).
Každé volání getCell vrací instanci třídy ExcelDataCell. Tento objekt představuje jednu buňku v sešitu Excel a poskytuje vám jednoduchý a intuitivní přístup k její hodnotě.
Import Excelového grafu
Dalším krokem pro rozšíření funkčnosti je třída ExcelWorkbookImporter. Tato pomocná třída poskytuje funkci pro importování obsahu ze sešitu Excel do prezentace. Obsahuje několik přetížení metody addChartFromWorkbook, které vám pomohou získat vybraný graf ze zadaného sešitu Excel a přidat jej na konec dané kolekce tvarů na zadaných souřadnicích.
Stručně řečeno, jde o lehké a přímé API pro čtení dat z Excelu — přesně to, co mnoha vývojářům chybí, bez zátěže kompletní knihovny pro zpracování tabulek.
Pojďme kódovat
Příklad scénáře hromadné korespondence
V následujícím příkladu implementujeme jednoduchý scénář hromadné korespondence generováním více prezentací na základě dat uložených v sešitu Excel.
Pro začátek potřebujeme dvě věci:
- Sešit Excel obsahující data

- Šablona prezentace PowerPoint

// Načíst sešit Excel s údaji zaměstnanců.
$workbook = new ExcelDataWorkbook("TemplateData.xlsx");
$worksheetIndex = 0;
// Načíst šablonu prezentace.
$templatePresentation = new Presentation("PresentationTemplate.pptx");
try {
// Procházet řádky Excelu (s výjimkou záhlaví v řádku 0).
for ($rowIndex = 1; $rowIndex <= 4; $rowIndex++) {
// Vytvořit novou prezentaci pro každý záznam zaměstnance.
$employeePresentation = new Presentation();
try {
// Odstranit výchozí prázdný snímek.
$employeePresentation->getSlides()->removeAt(0);
// Zkopírovat šablonový snímek do nové prezentace.
$slide = $employeePresentation->getSlides()->addClone($templatePresentation->getSlides()->get_Item(0));
// Získat odstavce z cílového tvaru (předpokládá se, že se používá index tvaru 1).
$paragraphs = $slide->getShapes()->get_Item(1)->getTextFrame()->getParagraphs();
// Nahradit zástupné značky daty z Excelu.
$employeeName = $workbook->getCell($worksheetIndex, $rowIndex, 0)->getValue()->toString();
$namePortion = $paragraphs->get_Item(0)->getPortions()->get_Item(0);
$namePortion->setText($namePortion->getText()->replace("{{EmployeeName}}", $employeeName));
$department = $workbook->getCell($worksheetIndex, $rowIndex, 1)->getValue()->toString();
$departmentPortion = $paragraphs->get_Item(1)->getPortions()->get_Item(0);
$departmentPortion->setText($departmentPortion->getText()->replace("{{Department}}", $department));
$yearsOfService = $workbook->getCell($worksheetIndex, $rowIndex, 2)->getValue()->toString();
$yearsPortion = $paragraphs->get_Item(2)->getPortions()->get_Item(0);
$yearsPortion->setText($yearsPortion->getText()->replace("{{YearsOfService}}", $yearsOfService));
// Uložit personalizovanou prezentaci do samostatného souboru.
$employeePresentation->save(sprintf("%s Report.pptx", $employeeName), SaveFormat::Pptx);
} finally {
$employeePresentation->dispose();
}
}
} finally {
$templatePresentation->dispose();
}

Příklad tabulky Excel
Ve druhém příkladu jednoduše zkopírujeme data z tabulky Excel a zobrazíme je na slidu PowerPoint v vizuálně atraktivnějším formátu.
V tomto příkladu znovu použijeme stejný sešit Excel z prvního příkladu, který obsahuje jednoduchou tabulku zaměstnanců.
// Načíst sešit Excel obsahující data zaměstnanců.
$workbook = new ExcelDataWorkbook("TemplateData.xlsx");
$worksheetIndex = 0;
// Vytvořit novou prezentaci PowerPoint.
$presentation = new Presentation();
try {
// Přidat tvar tabulky na první snímek.
$table = $presentation->getSlides()->get_Item(0)->getShapes()->addTable(
50, 200,
array(200, 200, 200),
array(30, 30, 30, 30, 30)
);
// Vyplnit tabulku PowerPoint daty ze sešitu Excel.
for ($rowIndex = 0; $rowIndex < 5; $rowIndex++) {
for ($columnIndex = 0; $columnIndex < 3; $columnIndex++) {
$cellValue = $workbook->getCell($worksheetIndex, $rowIndex, $columnIndex)->getValue()->toString();
$table->getColumns()->get_Item($columnIndex)->get_Item($rowIndex)->getTextFrame()->setText($cellValue);
}
}
// Uložit výslednou prezentaci do souboru.
$presentation->save("Table.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}

Příklad importu Excelového grafu
V tomto příkladu importujeme graf z prvního listu sešitu Excel použitého v předchozím příkladu. Graf bude v výsledné prezentaci odkazovat na externí sešit.
Nejprve přidáme koláčový graf do sešitu Excel na základě tabulky zaměstnanců.

// Vytvořit novou prezentaci PowerPoint.
$presentation = new Presentation();
try {
// Získat kolekci tvarů prvního snímku.
$shapes = $presentation->getSlides()->get_Item(0)->getShapes();
// Importovat graf s názvem "Chart 1" z prvního listu sešitu a přidat jej do kolekce tvarů.
ExcelWorkbookImporter::addChartFromWorkbook($shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "Chart 1", false);
// Uložit výslednou prezentaci do souboru.
$presentation->save("Chart.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}

Příklad importu všech grafů Excel
Představte si, že máte sešit Excel plný grafů a potřebujete je všechny importovat do prezentace. Každý graf by měl být umístěn na nový slide.
Následující kód prochází všechny listy ve zdrojovém souboru Excel, extrahuje grafy z každého listu a přidá každý graf na samostatný slide pomocí prázdného rozvržení slidu. Ve výsledné prezentaci bude vložen pouze datový obsah grafu, nikoli celý sešit.
// Načíst sešit Excel obsahující data zaměstnanců.
$workbook = new ExcelDataWorkbook("ExcelWithCharts.xlsx");
// Vytvořit novou prezentaci PowerPoint.
$presentation = new Presentation();
try {
// Získat šablonu prázdného snímku.
$blankLayout = $presentation->getLayoutSlides()->getByType(SlideLayoutType::Blank);
// Získat názvy všech listů obsažených v sešitu Excel.
$worksheetNames = $workbook->getWorksheetNames()->iterator();
while (java_values($worksheetNames->hasNext())) {
$name = $worksheetNames->next();
// Získat mapu, která mapuje indexy grafů na názvy grafů pro list.
$worksheetCharts = $workbook->getChartsFromWorksheet($name)->iterator();
while (java_values($worksheetCharts->hasNext())) {
$chart = $worksheetCharts->next();
// Přidat nový snímek pomocí prázdné šablony.
$slide = $presentation->getSlides()->addEmptySlide($blankLayout);
// Importovat zadaný graf ze sešitu Excel do kolekce tvarů snímku.
ExcelWorkbookImporter::addChartFromWorkbook(
$slide->getShapes(), 10, 10, $workbook, $name, $chart->getKey(), false);
}
}
// Uložit výslednou prezentaci do souboru.
$presentation->save("Charts.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Shrnutí
Tento mechanismus, dostupný přímo v Aspose.Slides, spojuje práci s daty Excel a prezentacemi na jednom místě. Umožňuje vám vytvářet slidy s vizuálními grafy a daty prezentovanými jako tabulky Excel – bez jakýchkoli dalších knihoven či složitých integrací.