Zarządzanie projektami VBA w prezentacjach przy użyciu Pythona

Wprowadzenie

Aspose.Slides udostępnia klasy i interfejsy do pracy z makrami i kodem VBA.

Dodawanie makr VBA

Aspose.Slides udostępnia klasę VbaProject, aby umożliwić tworzenie projektów VBA (i odwołań do projektów) oraz edytowanie istniejących modułów. Możesz używać klasy VbaProject do zarządzania VBA osadzonym w prezentacji.

  1. Utwórz instancję klasy Presentation.
  2. Użyj konstruktora VbaProject, aby dodać nowy projekt VBA.
  3. Dodaj moduł do projektu VBA.
  4. Ustaw kod źródłowy modułu.
  5. Dodaj odwołania do stdole.
  6. Dodaj odwołania do Microsoft Office.
  7. Powiąż odwołania z projektem VBA.
  8. Zapisz prezentację.

Ten kod w Pythonie pokazuje, jak od podstaw dodać makro VBA do prezentacji:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, VbaProject, VbaReferenceOleTypeLib

presentation = Presentation()
try:
    # Utwórz nowy projekt VBA.
    vba_project = VbaProject()
    presentation.setVbaProject(vba_project)

    # Dodaj pusty moduł i ustaw jego kod źródłowy.
    module = vba_project.getModules().addEmptyModule("Module")
    module.setSourceCode('Sub Test(oShape As Shape)\n    MsgBox "Test"\nEnd Sub')

    # Utwórz odwołania do stdole i Microsoft Office.
    stdole_reference = VbaReferenceOleTypeLib("stdole", r"*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation")
    office_reference = VbaReferenceOleTypeLib("Office", r"*\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL#Microsoft Office 14.0 Object Library")

    # Dodaj odwołania do projektu VBA.
    vba_project.getReferences().add(stdole_reference)
    vba_project.getReferences().add(office_reference)

    # Zapisz prezentację.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Usuwanie makr VBA

Korzystając z metody getVbaProject klasy Presentation, możesz usunąć makro VBA.

  1. Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą makro.
  2. Uzyskaj dostęp do modułu makra i usuń go.
  3. Zapisz zmodyfikowaną prezentację.

Ten kod w Pythonie pokazuje, jak usunąć makro VBA:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

# Wczytaj prezentację zawierającą makro.
presentation = Presentation("VBA.pptm")
try:
    # Uzyskaj dostęp do modułu VBA i usuń go.
    vba_project = presentation.getVbaProject()
    if vba_project is not None and len(list(vba_project.getModules())) > 0:
        module = vba_project.getModules().get_Item(0)
        vba_project.getModules().remove(module)

    # Zapisz prezentację.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Wyodrębnianie makr VBA

  1. Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą makro.
  2. Sprawdź, czy prezentacja zawiera projekt VBA.
  3. Przejdź przez wszystkie moduły zawarte w projekcie VBA, aby wyświetlić makra.

Ten kod w Pythonie pokazuje, jak wyodrębnić makra VBA z prezentacji zawierającej makra:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

# Wczytaj prezentację zawierającą makro.
presentation = Presentation("VBA.pptm")
try:
    # Sprawdź, czy prezentacja zawiera projekt VBA.
    vba_project = presentation.getVbaProject()
    if vba_project is not None:
        for module in vba_project.getModules():
            print(module.getName())
            print(module.getSourceCode())
finally:
    presentation.dispose()

Sprawdzanie, czy projekt VBA jest zabezpieczony hasłem

Korzystając z metody VbaProject.isPasswordProtected, możesz określić, czy właściwości projektu są zabezpieczone hasłem.

  1. Utwórz instancję klasy Presentation i wczytaj prezentację zawierającą makro.
  2. Sprawdź, czy prezentacja zawiera projekt VBA.
  3. Sprawdź, czy projekt VBA jest zabezpieczony hasłem, aby zobaczyć jego właściwości.
import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("VBA.pptm")
try:
    # Sprawdź, czy prezentacja zawiera projekt VBA.
    vba_project = presentation.getVbaProject()
    if vba_project is not None:
        if vba_project.isPasswordProtected():
            print(f"The VBA project '{vba_project.getName()}' is password-protected for viewing its properties.")
finally:
    presentation.dispose()

FAQ

Co się dzieje z makrami, kiedy zapisuję prezentację jako PPTX?

Makra zostaną usunięte, ponieważ format PPTX nie obsługuje VBA. Aby zachować makra, wybierz PPTM, PPSM lub POTM.

Czy Aspose.Slides może uruchamiać makra w prezentacji, np. odświeżać dane?

Nie. Biblioteka nigdy nie wykonuje kodu VBA; wykonanie jest możliwe wyłącznie w PowerPoint przy odpowiednich ustawieniach zabezpieczeń.

Czy obsługa kontrolek ActiveX powiązanych z kodem VBA jest wspierana?

Tak, możesz uzyskać dostęp do istniejących kontrolek ActiveX, modyfikować ich właściwości i usuwać je. Jest to przydatne, gdy makra współdziałają z ActiveX.