Integracja danych Excel w prezentacjach PowerPoint
Wprowadzenie
Prezentacje PowerPoint to potężny sposób na wyświetlanie i przekazywanie informacji. Często są używane w połączeniu z skoroszytami Excel, gdzie Excel jest doskonałym źródłem danych strukturalnych, a PowerPoint wyróżnia się w wizualizacji 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 konsolidacja wielu raportów Excel w jednej prezentacji, by wymienić tylko niektóre.
Do tej pory implementacja takich funkcji za pomocą API Aspose.Slides wymagała korzystania z rozwiązań firm trzecich, takich jak Aspose.Cells. Choć te narzędzia 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 skoroszytów Excel i importowania ich 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 prezentacji.
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 pozwala na edytowanie ani zapisywanie plików Excel — jej jedynym celem jest otwieranie skoroszytów i nawigowanie po ich zawartości w celu pobrania danych komórek.
U podstaw tej funkcji znajduje się nowa klasa ExcelDataWorkbook. Klasa ta umożliwia wczytanie skoroszytu Excel z lokalnego pliku lub strumienia. Po wczytaniu udostępnia kilka przeciążeń metody getCell, które można użyć do pobrania konkretnych komórek według ich położenia (np. indeksów wiersza i kolumny lub zakresów nazwanych).
Każde wywołanie getCell zwraca instancję klasy ExcelDataCell. Obiekt ten reprezentuje pojedynczą komórkę w skoroszycie Excel i zapewnia dostęp do jej wartości w prosty i intuicyjny sposób.
Importuj wykres Excel
Kolejnym krokiem rozszerzającym funkcjonalność jest klasa ExcelWorkbookImporter. Klasa narzędziowa dostarcza funkcje importowania zawartości ze skoroszytu Excel do prezentacji. Zawiera kilka przeciążeń metody addChartFromWorkbook, które pomagają pobrać wybrany wykres z określonego skoroszytu Excel i dodać go na koniec podanej kolekcji kształtów w określonych współrzędnych.
W skrócie, jest to lekka i prosta w użyciu 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
W poniższym przykładzie zaimplementujemy prosty scenariusz scalania korespondencji, generując wiele prezentacji na podstawie danych przechowywanych w skoroszycie Excel.
Aby rozpocząć, potrzebujemy dwóch rzeczy:
- Skoroszyt Excel zawierający dane

- Szablon prezentacji PowerPoint

// Wczytaj skoroszyt Excel z danymi pracowników.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("TemplateData.xlsx");
int worksheetIndex = 0;
// Wczytaj szablon prezentacji.
Presentation templatePresentation = new Presentation("PresentationTemplate.pptx");
try {
// Iteruj po wierszach Excela (z wykluczeniem nagłówka w wierszu 0).
for (int rowIndex = 1; rowIndex <= 4; rowIndex++) {
// Utwórz nową prezentację dla każdego rekordu pracownika.
Presentation employeePresentation = new Presentation();
try {
// Usuń domyślny pusty slajd.
employeePresentation.getSlides().removeAt(0);
// Sklonuj slajd szablonu do nowej prezentacji.
ISlide slide = employeePresentation.getSlides().addClone(templatePresentation.getSlides().get_Item(0));
// Pobierz paragrafy z docelowego kształtu (zakłada się, że używany jest indeks kształtu 1).
IParagraphCollection paragraphs = ((IAutoShape)slide.getShapes().get_Item(1)).getTextFrame().getParagraphs();
// Zastąp znaczniki danymi z Excela.
String employeeName = workbook.getCell(worksheetIndex, rowIndex, 0).getValue().toString();
IPortion namePortion = paragraphs.get_Item(0).getPortions().get_Item(0);
namePortion.setText(namePortion.getText().replace("{{EmployeeName}}", employeeName));
String department = workbook.getCell(worksheetIndex, rowIndex, 1).getValue().toString();
IPortion departmentPortion = paragraphs.get_Item(1).getPortions().get_Item(0);
departmentPortion.setText(departmentPortion.getText().replace("{{Department}}", department));
String yearsOfService = workbook.getCell(worksheetIndex, rowIndex, 2).getValue().toString();
IPortion yearsPortion = paragraphs.get_Item(2).getPortions().get_Item(0);
yearsPortion.setText(yearsPortion.getText().replace("{{YearsOfService}}", yearsOfService));
// Zapisz spersonalizowaną prezentację do osobnego pliku.
employeePresentation.save(String.format("%s Report.pptx", employeeName), SaveFormat.Pptx);
} finally {
employeePresentation.dispose();
}
}
} finally {
templatePresentation.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 skoroszytu Excel z pierwszego przykładu, który zawiera prostą tabelę pracowników.
// Wczytaj skoroszyt Excel zawierający dane pracowników.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("TemplateData.xlsx");
int worksheetIndex = 0;
// Utwórz nową prezentację PowerPoint.
Presentation presentation = new Presentation();
try {
// Dodaj kształt tabeli do pierwszego slajdu.
ITable table = presentation.getSlides().get_Item(0).getShapes().addTable(
50, 200,
new double[]{200, 200, 200},
new double[]{30, 30, 30, 30, 30}
);
// Wypełnij tabelę PowerPoint danymi ze skoroszytu Excel.
for (int rowIndex = 0; rowIndex < 5; rowIndex++) {
for (int columnIndex = 0; columnIndex < 3; columnIndex++) {
String cellValue = workbook.getCell(worksheetIndex, rowIndex, columnIndex).getValue().toString();
table.getColumns().get_Item(columnIndex).get_Item(rowIndex).getTextFrame().setText(cellValue);
}
}
// Zapisz powstałą prezentację do pliku.
presentation.save("Table.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}

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

// Utwórz nową prezentację PowerPoint.
Presentation presentation = new Presentation();
try {
// Uzyskaj kolekcję kształtów pierwszego slajdu.
IShapeCollection shapes = presentation.getSlides().get_Item(0).getShapes();
// Importuj 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 importu wszystkich wykresów Excel
Wyobraźmy sobie, że masz skoroszyt Excel pełen wykresów i musisz je wszystkie zaimportować do prezentacji. Każdy wykres powinien zostać umieszczony na nowym slajdzie.
Poniższy kod iteruje po wszystkich arkuszach w źródłowym pliku Excel, wyodrębnia wykresy z każdego arkusza i dodaje każdy wykres do osobnego slajdu, używając pustego układu slajdu. W powstałej prezentacji zostaną osadzone tylko dane wykresu, a nie cały skoroszyt.
// Wczytaj skoroszyt Excel zawierający dane pracowników.
ExcelDataWorkbook workbook = new ExcelDataWorkbook("ExcelWithCharts.xlsx");
// Utwórz nową prezentację PowerPoint.
Presentation presentation = new Presentation();
try {
// Pobierz układ pustego slajdu.
ILayoutSlide blankLayout = presentation.getLayoutSlides().getByType(SlideLayoutType.Blank);
// Pobierz nazwy wszystkich arkuszy zawartych w skoroszycie Excel.
List<String> worksheetNames = workbook.getWorksheetNames();
for (String name : worksheetNames) {
// Pobierz mapę, która mapuje indeksy wykresów na nazwy wykresów dla arkusza.
Dictionary<Integer, String> worksheetCharts = workbook.getChartsFromWorksheet(name);
for (KeyValuePair<Integer, String> chart : worksheetCharts) {
// Dodaj nowy slajd używając układu pustego.
ISlide slide = presentation.getSlides().addEmptySlide(blankLayout);
// Importuj określony 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();
}
Podsumowanie
Ten mechanizm, dostępny bezpośrednio w Aspose.Slides, łączy pracę z danymi Excel i prezentacjami w jednym miejscu. Umożliwia tworzenie slajdów z wykresami wizualnymi i danymi prezentowanymi jako tabele Excel — bez dodatkowych bibliotek czy skomplikowanych integracji.