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 stanowi doskonałe źródło 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 poczty (mail merge), wypełnianie tabel danych, generowanie jednego slajdu na rekord danych (batch slide generation), tworzenie materiałów szkoleniowych oraz konsolidacja wielu raportów Excel w jedną prezentację, by wymienić tylko niektóre.

Do tej pory implementacja takich funkcji przy użyciu 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 służące do odczytu danych z skoroszytów Excel oraz 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 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 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 z komórek.

U podstaw tej funkcji znajduje się nowa klasa ExcelDataWorkbook. Ta klasa umożliwia załadowanie skoroszytu Excel z pliku lokalnego lub strumienia. Po załadowaniu udostępnia kilka przeciążeń metody get_cell, które można używać do pobierania określonych komórek według ich pozycji (np. indeksy wiersza i kolumny lub nazwane zakresy).

Każde wywołanie get_cell zwraca instancję klasy ExcelDataCell. Obiekt ten reprezentuje pojedynczą komórkę w skoroszycie Excel i daje dostęp do jej wartości w prosty i intuicyjny sposób.

Import wykresu Excel

Kolejnym krokiem rozszerzania funkcjonalności jest klasa ExcelWorkbookImporter. Ta klasa narzędziowa zapewnia funkcję importu zawartości z skoroszytu Excel do prezentacji. Zawiera kilka przeciążeń metody add_chart_from_workbook, które pomagają pobrać wybrany wykres z określonego skoroszytu Excel i dodać go na koniec podanej kolekcji kształtów w zadanych współrzędnych.

Krótko mówiąc, jest to lekki i prosty interfejs API do odczytu danych Excel — dokładnie to, czego potrzebuje wielu programistów, bez obciążenia pełnoprawną biblioteką przetwarzania arkuszy kalkulacyjnych.

Zacznijmy kodować

Przykład scenariusza scalania poczty (Mail Merge)

W poniższym przykładzie zaimplementujemy prosty scenariusz mail merge, generując wiele prezentacji na podstawie danych przechowywanych w skoroszycie Excel.

Aby rozpocząć, potrzebujemy dwóch rzeczy:

  1. Skoroszyt Excel zawierający dane

Przykład danych Excel

  1. Szablon prezentacji PowerPoint

Przykład szablonu PowerPoint

import aspose.slides as slides

# Wczytaj skoroszyt Excel z danymi pracowników.
workbook = slides.excel.ExcelDataWorkbook("TemplateData.xlsx")
worksheet_index = 0

# Wczytaj szablon prezentacji.
with slides.Presentation("PresentationTemplate.pptx") as template_presentation:

    # Iteruj przez wiersze Excela (z pominięciem nagłówka w wierszu 0).
    for row_index in range(1, 5):

        # Utwórz nową prezentację dla każdego rekordu pracownika.
        with slides.Presentation() as employee_presentation:

            # Usuń domyślny pusty slajd.
            employee_presentation.slides.remove_at(0)

            # Sklonuj slajd szablonu do nowej prezentacji.
            slide = employee_presentation.slides.add_clone(template_presentation.slides[0])

            # Pobierz akapity z docelowego kształtu (zakłada się użycie indeksu kształtu 1).
            paragraphs = slide.shapes[1].text_frame.paragraphs

            # Zastąp symbole zastępcze danymi z Excela.
            employee_name = workbook.get_cell(worksheet_index, row_index, 0).value
            name_portion = paragraphs[0].portions[0]
            name_portion.text = name_portion.text.replace("{{EmployeeName}}", employee_name)

            department = workbook.get_cell(worksheet_index, row_index, 1).value
            department_portion = paragraphs[1].portions[0]
            department_portion.text = department_portion.text.replace("{{Department}}", department)

            years_of_service = str(workbook.get_cell(worksheet_index, row_index, 2).value)
            years_portion = paragraphs[2].portions[0]
            years_portion.text = years_portion.text.replace("{{YearsOfService}}", years_of_service)

            # Zapisz spersonalizowaną prezentację do oddzielnego pliku.
            employee_presentation.save(f"{employee_name} Report.pptx", slides.export.SaveFormat.PPTX)

Wynik

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.
workbook = slides.excel.ExcelDataWorkbook("TemplateData.xlsx")
worksheet_index = 0

# Utwórz nową prezentację PowerPoint.
with slides.Presentation() as presentation:

    # Dodaj kształt tabeli do pierwszego slajdu.
    table = presentation.slides[0].shapes.add_table(
        50, 200,
        [200, 200, 200],
        [30, 30, 30, 30, 30]
    )

    # Wypełnij tabelę PowerPoint danymi ze skoroszytu Excel.
    for row_index in range(0, 5):
        for column_index in range(0, 3):
            cell_value = str(workbook.get_cell(worksheet_index, row_index, column_index).value)
            table.columns[column_index][row_index].text_frame.text = cell_value

    # Zapisz powstałą prezentację do pliku.
    presentation.save("Table.pptx", slides.export.SaveFormat.PPTX)

Wynik

Przykład importu wykresu Excel

W tym przykładzie importujemy wykres z pierwszego arkusza skoroszytu Excel używanego 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.

Przykład wykresu Excel

# Utwórz nową prezentację PowerPoint.
with slides.Presentation() as presentation:
    # Pobierz kolekcję kształtów pierwszego slajdu.
    shapes = presentation.slides[0].shapes

    # Zaimportuj wykres o nazwie "Chart 1" z pierwszego arkusza skoroszytu i dodaj go do kolekcji kształtów.
    slides.importing.ExcelWorkbookImporter.add_chart_from_workbook(
        shapes, 10, 10, "TemplateData.xlsx", "Sheet1", "Chart 1", False)

    # Zapisz powstałą prezentację do pliku.
    presentation.save("Chart.pptx", slides.export.SaveFormat.PPTX)

Wynik

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 będą osadzone tylko dane wykresu, a nie cały skoroszyt.

# Wczytaj skoroszyt Excel zawierający dane pracowników.
workbook = slides.excel.ExcelDataWorkbook("ExcelWithCharts.xlsx")

# Utwórz nową prezentację PowerPoint.
with slides.Presentation() as presentation:
    # Pobierz układ pustego slajdu.
    blank_layout = presentation.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    # Pobierz nazwy wszystkich arkuszy znajdujących się w skoroszycie Excel.
    worksheet_names = workbook.get_worksheet_names()

    for name in worksheet_names:
        # Pobierz słownik mapujący indeksy wykresów na ich nazwy dla arkusza.
        worksheet_charts = workbook.get_charts_from_worksheet(name)
        
        for chart in worksheet_charts:
            # Dodaj nowy slajd używając układu pustego.
            slide = presentation.slides.add_empty_slide(blank_layout)

            # Zaimportuj określony wykres ze skoroszytu Excel do kolekcji kształtów slajdu.
            slides.importing.ExcelWorkbookImporter.add_chart_from_workbook(
                slide.shapes, 10, 10, workbook, name, chart.key, False)

    # Zapisz powstałą prezentację do pliku.
    presentation.save("Charts.pptx", slides.export.SaveFormat.PPTX)

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 oraz danymi przedstawionymi jako tabele Excel — bez dodatkowych bibliotek czy skomplikowanych integracji.