Integracja danych Excel w prezentacjach PowerPoint
Wstęp
Prezentacje PowerPoint to potężny sposób na wyświetlanie i przekazywanie informacji. Często są używane w połączeniu z zeszytami Excel, gdzie Excel stanowi doskonałe źródło danych strukturalnych, a PowerPoint świetnie wizualizuje te dane dla odbiorców.
Istnieje wiele praktycznych scenariuszy, w których łączenie Excela i PowerPointa jest niezbędne: scalanie korespondencji, wypełnianie tabel danymi, generowanie jednego slajdu na rekord danych (generowanie wsadowe slajdów), tworzenie materiałów szkoleniowych oraz konsolidacja wielu raportów Excel w jedną prezentację, aby wymienić tylko kilka.
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 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 z prezentacjami.
Nowa funkcjonalność jest przeznaczona do ogólnego dostępu do danych i nie jest zintegrowana z modelem obiektów dokumentu prezentacji (DOM). Oznacza to, że nie pozwala na edytowanie ani zapisywanie plików Excel — jej jedynym celem jest otwieranie zeszytów i nawigowanie po ich zawartości w celu pobrania danych komórek.
W rdzeniu tej funkcji znajduje się nowa klasa ExcelDataWorkbook. Klasa ta pozwala wczytać zeszyt Excel z lokalnego pliku lub strumienia. Po załadowaniu udostępnia kilka przeciążeń metody GetCell, które można wykorzystać do pobierania konkretnych komórek według ich położenia (np. indeksów wiersza i kolumny lub nazwanych zakresów).
Każde wywołanie GetCell zwraca instancję klasy ExcelDataCell. Obiekt ten reprezentuje pojedynczą komórkę w zeszycie Excel i zapewnia dostęp do jej wartości w prosty i intuicyjny sposób.
Import wykresu Excel
Kolejnym krokiem w rozszerzaniu funkcjonalności jest klasa ExcelWorkbookImporter. Ta klasa narzędziowa zapewnia funkcję importowania zawartości z zeszytu Excel do prezentacji. Zawiera kilka przeciążeń metody 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.
Krótko mówiąc, jest to lekka i prosta w użyciu API do odczytywania danych Excel — dokładnie to, czego potrzebuje wielu programistów, bez narzutu pełnej biblioteki 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 zeszycie Excel.
Aby rozpocząć, potrzebujemy dwóch rzeczy:
- Zeszyt Excel zawierający dane

- Szablon prezentacji PowerPoint

// Załaduj skoroszyt Excela z danymi pracowników.
auto workbook = MakeObject<ExcelDataWorkbook>(u"TemplateData.xlsx");
auto worksheetIndex = 0;
// Załaduj szablon prezentacji.
auto templatePresentation = MakeObject<Presentation>(u"PresentationTemplate.pptx");
// Przejdź przez wiersze Excela (z wyłączeniem nagłówka w wierszu 0).
for (auto rowIndex = 1; rowIndex <= 4; rowIndex++) {
// Utwórz nową prezentację dla każdego rekordu pracownika.
auto employeePresentation = MakeObject<Presentation>();
// Usuń domyślny pusty slajd.
employeePresentation->get_Slides()->RemoveAt(0);
// Sklonuj slajd szablonu do nowej prezentacji.
auto slide = employeePresentation->get_Slides()->AddClone(templatePresentation->get_Slide(0));
// Pobierz akapity z docelowego kształtu (zakłada się, że używany jest indeks kształtu 1).
auto paragraphs = ExplicitCast<IAutoShape>(slide->get_Shape(1))->get_TextFrame()->get_Paragraphs();
// Zastąp symbole zastępcze danymi z Excela.
auto employeeName = workbook->GetCell(worksheetIndex, rowIndex, 0)->get_Value()->ToString();
auto namePortion = paragraphs->idx_get(0)->get_Portion(0);
namePortion->set_Text(namePortion->get_Text().Replace(u"{{EmployeeName}}", employeeName));
auto department = workbook->GetCell(worksheetIndex, rowIndex, 1)->get_Value()->ToString();
auto departmentPortion = paragraphs->idx_get(1)->get_Portion(0);
departmentPortion->set_Text(departmentPortion->get_Text().Replace(u"{{Department}}", department));
auto yearsOfService = workbook->GetCell(worksheetIndex, rowIndex, 2)->get_Value()->ToString();
auto yearsPortion = paragraphs->idx_get(2)->get_Portion(0);
yearsPortion->set_Text(yearsPortion->get_Text().Replace(u"{{YearsOfService}}", yearsOfService));
// Zapisz spersonalizowaną prezentację do osobnego pliku.
employeePresentation->Save(String::Format(u"{0} Report.pptx", employeeName), SaveFormat::Pptx);
employeePresentation->Dispose();
}
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 zeszytu Excel z pierwszego przykładu, który zawiera prostą tabelę pracowników.
// Załaduj skoroszyt Excela zawierający dane pracowników.
auto workbook = MakeObject<ExcelDataWorkbook>(u"TemplateData.xlsx");
auto worksheetIndex = 0;
// Utwórz nową prezentację PowerPoint.
auto presentation = MakeObject<Presentation>();
// Dodaj kształt tabeli do pierwszego slajdu.
auto table = presentation->get_Slide(0)->get_Shapes()->AddTable(
50, 200,
MakeArray<double>({200, 200, 200}),
MakeArray<double>({30, 30, 30, 30, 30})
);
// Wypełnij tabelę PowerPoint danymi z skoroszytu Excela.
for (auto rowIndex = 0; rowIndex < 5; rowIndex++) {
for (auto columnIndex = 0; columnIndex < 3; columnIndex++) {
auto cellValue = workbook->GetCell(worksheetIndex, rowIndex, columnIndex)->get_Value()->ToString();
table->get_Column(columnIndex)->idx_get(rowIndex)->get_TextFrame()->set_Text(cellValue);
}
}
// Zapisz powstałą prezentację do pliku.
presentation->Save(u"Table.pptx", SaveFormat::Pptx);
presentation->Dispose();

Przykład importu wykresu Excel
W tym przykładzie importujemy wykres z pierwszego arkusza zeszytu Excel używanego w poprzednim przykładzie. Wykres będzie linkował do zewnętrznego zeszytu w powstałej prezentacji.
Najpierw dodajemy wykres kołowy do zeszytu Excel na podstawie tabeli pracowników.

// Utwórz nową prezentację PowerPoint.
auto presentation = MakeObject<Presentation>();
// Pobierz kolekcję kształtów z pierwszego slajdu.
auto shapes = presentation->get_Slide(0)->get_Shapes();
// Importuj wykres o nazwie "Chart 1" z pierwszego arkusza skoroszytu i dodaj go do kolekcji kształtów.
ExcelWorkbookImporter::AddChartFromWorkbook(shapes, 10.0, 10.0, u"TemplateData.xlsx", u"Sheet1", u"Chart 1", false);
// Zapisz powstałą prezentację do pliku.
presentation->Save(u"Chart.pptx", SaveFormat::Pptx);
presentation->Dispose();

Przykład importu wszystkich wykresów Excel
Wyobraźmy sobie, że masz zeszyt Excel pełen wykresów i musisz wszystkie zaimportować do prezentacji. Każdy wykres powinien znajdować się 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 osadzone będą tylko dane wykresu, a nie cały zeszyt.
// Załaduj skoroszyt Excela zawierający dane pracowników.
auto workbook = MakeObject<ExcelDataWorkbook>(u"ExcelWithCharts.xlsx");
// Utwórz nową prezentację PowerPoint.
auto presentation = MakeObject<Presentation>();
// Pobierz układ pustego slajdu.
auto blankLayout = presentation->get_LayoutSlides()->GetByType(SlideLayoutType::Blank);
// Pobierz nazwy wszystkich arkuszy zawartych w skoroszycie Excela.
auto worksheetNames = workbook->GetWorksheetNames();
for (auto&& name : worksheetNames)
{
// Pobierz słownik mapujący indeksy wykresów na nazwy wykresów dla arkusza.
auto worksheetCharts = workbook->GetChartsFromWorksheet(name);
for (auto&& chart : worksheetCharts)
{
// Dodaj nowy slajd używając układu pustego.
auto slide = presentation->get_Slides()->AddEmptySlide(blankLayout);
// Zaimportuj określony wykres ze skoroszytu Excela do kolekcji kształtów slajdu.
ExcelWorkbookImporter::AddChartFromWorkbook(slide->get_Shapes(), 10.0, 10.0, workbook, name, chart.get_Key(), false);
}
}
// Zapisz powstałą prezentację do pliku.
presentation->Save(u"Charts.pptx", SaveFormat::Pptx);
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 przedstawionymi jako tabele Excel — bez dodatkowych bibliotek ani skomplikowanych integracji.