Integracja danych Excel w prezentacjach PowerPoint
Wprowadzenie
Prezentacje PowerPoint to potężny sposób wyświetlania i przekazywania informacji. Często są używane w połączeniu z zeszytami Excel, gdzie Excel jest doskonałym źródłem danych strukturalnych, a PowerPoint wyróżnia się wizualizacją tych danych dla odbiorców.
Istnieje wiele praktycznych scenariuszy, w których łączenie Excela i PowerPointa jest niezbędne: scalanie korespondencji, wypełnianie tabel danych, generowanie jednego slajdu na rekord danych (generowanie slajdów wsadowych), tworzenie materiałów szkoleniowych oraz konsolidowanie wielu raportów Excel w jednej prezentacji, by wymienić tylko niektóre.
Do tej pory implementacja takich funkcji przy użyciu API Aspose.Slides wymagała korzystania z rozwiązań zewnętrznych, takich jak Aspose.Cells. Choć narzędzia te są solidne, mogą być zbyt skomplikowane i kosztowne dla użytkowników, którzy potrzebują jedynie podstawowej funkcjonalności integracji danych.
Jak to działa
Aby ułatwić i usprawnić pracę z danymi Excel, Aspose.Slides wprowadziło nowe klasy do odczytywania danych z zeszytów Excel i importowania zawartości do prezentacji. Ta funkcja otwiera potężne nowe możliwości dla użytkowników API, którzy chcą wykorzystać Excel jako źródło danych w swoich przepływach pracy związanych z prezentacjami.
Nowa funkcjonalność jest przeznaczona do ogólnego dostępu do danych i nie jest zintegrowana z modelem obiektowym dokumentu prezentacji (DOM). Oznacza to, że nie umożliwia edytowania ani zapisywania plików Excel — jej jedynym celem jest otwieranie zeszytów i nawigowanie po ich zawartości w celu pobrania danych komórek.
U podstaw tej funkcji leży nowa klasa ExcelDataWorkbook. Klasa ta pozwala wczytać zeszyt Excel z lokalnego pliku lub strumienia. Po wczytaniu udostępnia kilka przeciążeń metody ExcelDataWorkbook.getCell, które można używać do pobierania konkretnych komórek według ich pozycji (np. indeksy wiersza i kolumny lub nazwane zakresy).
Każde wywołanie ExcelDataWorkbook.getCell zwraca obiekt ExcelDataCell. Obiekt ten reprezentuje pojedynczą komórkę w zeszycie Excel i daje dostęp do jej wartości w prosty i intuicyjny sposób.
Importowanie wykresu Excel
Kolejnym krokiem w rozszerzaniu funkcjonalności jest klasa ExcelWorkbookImporter. Ta klasa narzędziowa zapewnia możliwość importowania zawartości z zeszytu Excel do prezentacji. Zawiera kilka przeciążeń metody ExcelWorkbookImporter.addChartFromWorkbook, które pomagają pobrać wybrany wykres z określonego zeszytu Excel i dodać go na koniec podanej kolekcji kształtów w określonych współrzędnych.
Importowanie tabeli Excel
Klasa ExcelWorkbookImporter zawiera również kilka przeciążeń metody ExcelWorkbookImporter.addTableFromWorkbook. Metody te umożliwiają import określonego zakresu komórek z określonego arkusza i dodanie go jako tabeli na koniec podanej kolekcji kształtów w określonych współrzędnych.
Krótko mówiąc, jest to lekki i prosty interfejs API do odczytywania danych Excel — dokładnie to, czego potrzebuje wielu programistów, bez obciążenia pełną biblioteką przetwarzania arkuszy kalkulacyjnych.
Zacznijmy kodować
Przykład scenariusza scalania korespondencji
Aby rozpocząć, potrzebujemy dwóch rzeczy:
- Zeszyt Excel zawierający dane

- Szablon prezentacji PowerPoint

import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ExcelDataWorkbook, Presentation, SaveFormat
# Załaduj skoroszyt Excel z danymi pracowników.
workbook = ExcelDataWorkbook("TemplateData.xlsx")
worksheet_index = 0
# Załaduj szablon prezentacji.
template_presentation = Presentation("PresentationTemplate.pptx")
try:
# Przejdź przez wiersze Excela (z pominięciem nagłówka w wierszu 0).
for row_index in range(1, 5):
# Utwórz prezentację dla każdego rekordu pracownika.
employee_presentation = Presentation()
try:
# Usuń domyślny pusty slajd.
employee_presentation.getSlides().removeAt(0)
# Sklonuj slajd szablonu do prezentacji.
slide = employee_presentation.getSlides().addClone(template_presentation.getSlides().get_Item(0))
# Pobierz akapity z docelowego kształtu (zakłada się, że używany jest indeks kształtu 1).
paragraphs = slide.getShapes().get_Item(1).getTextFrame().getParagraphs()
# Zastąp znaczniki danymi z Excela.
employee_name = str(workbook.getCell(worksheet_index, row_index, 0).getValue())
name_portion = paragraphs.get_Item(0).getPortions().get_Item(0)
name_portion.setText(str(name_portion.getText()).replace("{{EmployeeName}}", employee_name))
department = str(workbook.getCell(worksheet_index, row_index, 1).getValue())
department_portion = paragraphs.get_Item(1).getPortions().get_Item(0)
department_portion.setText(str(department_portion.getText()).replace("{{Department}}", department))
years_of_service = str(workbook.getCell(worksheet_index, row_index, 2).getValue())
years_portion = paragraphs.get_Item(2).getPortions().get_Item(0)
years_portion.setText(str(years_portion.getText()).replace("{{YearsOfService}}", years_of_service))
# Zapisz spersonalizowaną prezentację do osobnego pliku.
employee_presentation.save(f"{employee_name} Report.pptx", SaveFormat.Pptx)
finally:
employee_presentation.dispose()
finally:
template_presentation.dispose()

Przykład tabeli Excel
W drugim przykładzie po prostu kopiujemy dane z tabeli Excel i wyświetlamy je na slajdzie PowerPoint w bardziej atrakcyjnej wizualnie formie.
W tym przykładzie ponownie używamy tego samego zeszytu Excel z pierwszego przykładu, który zawiera prostą tabelę pracowników.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ExcelDataWorkbook, Presentation, SaveFormat
# Załaduj skoroszyt Excel zawierający dane pracowników.
workbook = ExcelDataWorkbook("TemplateData.xlsx")
worksheet_index = 0
# Utwórz prezentację PowerPoint.
presentation = Presentation()
try:
# Dodaj kształt tabeli do pierwszego slajdu.
column_widths = jpype.JArray(jpype.JDouble)([200, 200, 200])
row_heights = jpype.JArray(jpype.JDouble)([30, 30, 30, 30, 30])
table = presentation.getSlides().get_Item(0).getShapes().addTable(50, 200, column_widths, row_heights)
# Wypełnij tabelę PowerPoint danymi ze skoroszytu Excel.
for row_index in range(5):
for column_index in range(3):
cell_value = str(workbook.getCell(worksheet_index, row_index, column_index).getValue())
table.getColumns().get_Item(column_index).get_Item(row_index).getTextFrame().setText(cell_value)
# Zapisz powstałą prezentację do pliku.
presentation.save("Table.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Przykład importowania wykresu Excel
W tym przykładzie importujemy wykres z pierwszego arkusza zeszytu Excel użytego w poprzednim przykładzie. Wykres będzie połączony z zewnętrznym zeszytem w powstałej prezentacji.
Najpierw dodajemy wykres kołowy do zeszytu Excel na podstawie tabeli pracowników.

import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ExcelWorkbookImporter, Presentation, SaveFormat
# Utwórz prezentację PowerPoint.
presentation = Presentation()
try:
# Pobierz kolekcję kształtów pierwszego slajdu.
shapes = presentation.getSlides().get_Item(0).getShapes()
# Zaimportuj wykres o nazwie "Chart 1" z pierwszego arkusza skoroszytu i dodaj go do kolekcji kształtów.
ExcelWorkbookImporter.addChartFromWorkbook(shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "Chart 1", False)
# Zapisz powstałą prezentację do pliku.
presentation.save("Chart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Przykład importowania wszystkich wykresów Excel
Wyobraźmy sobie, że masz zeszyt Excel pełen wykresów i musisz je wszystkie zaimportować do prezentacji. Każdy wykres powinien być umieszczony na nowym slajdzie.
Poniższy kod iteruje przez wszystkie arkusze w źródłowym pliku Excel, wyodrębnia wykresy z każdego arkusza i dodaje każdy wykres do osobnego slajdu używając układu pustego slajdu. W powstałej prezentacji zostaną osadzone jedynie dane wykresu, nie cały zeszyt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ExcelDataWorkbook, ExcelWorkbookImporter, Presentation, SaveFormat, SlideLayoutType
# Załaduj skoroszyt Excel zawierający dane pracowników.
workbook = ExcelDataWorkbook("ExcelWithCharts.xlsx")
# Utwórz prezentację PowerPoint.
presentation = Presentation()
try:
# Pobierz układ pustego slajdu.
blank_layout = presentation.getLayoutSlides().getByType(SlideLayoutType.Blank)
# Usuń domyślny slajd, aby wynik zawierał po jednym slajdzie na wykres.
presentation.getSlides().removeAt(0)
# Pobierz nazwy wszystkich arkuszy znajdujących się w skoroszycie Excel.
worksheet_names = workbook.getWorksheetNames()
for name in worksheet_names:
# Pobierz mapę, która mapuje indeksy wykresów na nazwy wykresów dla arkusza.
worksheet_charts = workbook.getChartsFromWorksheet(name)
for chart in worksheet_charts:
# Dodaj slajd używając układu pustego.
slide = presentation.getSlides().addEmptySlide(blank_layout)
# Zaimportuj wskazany wykres ze skoroszytu Excel do kolekcji kształtów slajdu.
ExcelWorkbookImporter.addChartFromWorkbook(slide.getShapes(), 10, 10, workbook, name, chart.getKey(), False)
# Zapisz powstałą prezentację do pliku.
presentation.save("Charts.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Przykład importowania tabeli Excel
W tym przykładzie importujemy sformatowaną tabelę z arkusza Excel bezpośrednio do prezentacji PowerPoint.
Źródłowy arkusz Excel zawiera sformatowaną tabelę z danymi pracowników:

import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ExcelWorkbookImporter, Presentation, SaveFormat
# Utwórz prezentację PowerPoint.
presentation = Presentation()
try:
# Pobierz pierwszy slajd i jego kolekcję kształtów.
slide = presentation.getSlides().get_Item(0)
shapes = slide.getShapes()
# Zaimportuj tabelę z pierwszego arkusza skoroszytu i dodaj ją do kolekcji kształtów.
ExcelWorkbookImporter.addTableFromWorkbook(shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "A1:C5")
# Zapisz powstałą prezentację do pliku.
presentation.save("FormattedTable.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Podsumowanie
Ten mechanizm, dostępny bezpośrednio w Aspose.Slides, łączy pracę z danymi Excel i prezentacjami w jednym miejscu. Pozwala tworzyć slajdy z wykresami wizualnymi oraz danymi przedstawionymi jako tabele Excel — bez dodatkowych bibliotek czy skomplikowanych integracji.