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

Wprowadzenie

API Aspose.Slides zawiera klasy umożliwiające pracę z makrami i kodem VBA.

Dodawanie makr VBA

Aspose.Slides udostępnia klasę VbaProject umożliwiającą tworzenie projektów VBA (i odwołań projektowych) 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 VbaProject.
  4. Ustaw kod źródłowy modułu.
  5. Dodaj odwołania do .
  6. Dodaj odwołania do Microsoft Office.
  7. Powiąż odwołania z projektem VBA.
  8. Zapisz prezentację.

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

  # Tworzy instancję klasy prezentacji
  $pres = new Presentation();
  try {
    # Tworzy nowy projekt VBA
    $pres->setVbaProject(new VbaProject());
    # Dodaje pusty moduł do projektu VBA
    $module = $pres->getVbaProject()->getModules()->addEmptyModule("Module");
    # Ustawia kod źródłowy modułu
    $module->setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    # Tworzy odwołanie do <stdole>
    $stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    # Tworzy odwołanie do Office
    $officeReference = new VbaReferenceOleTypeLib("Office", "*\\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");
    # Dodaje odwołania do projektu VBA
    $pres->getVbaProject()->getReferences()->add($stdoleReference);
    $pres->getVbaProject()->getReferences()->add($officeReference);
    # Zapisuje prezentację
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Usuwanie makr VBA

Korzystając z właściwości VbaProject 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 PHP pokazuje, jak usunąć makro VBA:

  # Wczytuje prezentację zawierającą makro
  $pres = new Presentation("VBA.pptm");
  try {
    # Uzyskuje dostęp do modułu Vba i usuwa go
    $pres->getVbaProject()->getModules()->remove($pres->getVbaProject()->getModules()->get_Item(0));
    # Zapisuje prezentację
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->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. Iteruj po wszystkich modułach zawartych w projekcie VBA, aby wyświetlić makra.

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

  # Wczytuje prezentację zawierającą makro
  $pres = new Presentation("VBA.pptm");
  try {
    # Sprawdza, czy prezentacja zawiera projekt VBA
    if (!java_is_null($pres->getVbaProject())) {
      foreach($pres->getVbaProject()->getModules() as $module) {
        echo($module->getName());
        echo($module->getSourceCode());
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Sprawdzanie, czy projekt VBA jest chroniony hasłem

Korzystając z metody VbaProject::isPasswordProtected, możesz określić, czy właściwości projektu są chronione 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 chroniony hasłem, aby wyświetlić jego właściwości.
$presentation = new Presentation("VBA.pptm");
try {
    if ($presentation->getVbaProject() != null) { // Sprawdź, czy prezentacja zawiera projekt VBA.
        if ($presentation->getVbaProject()->isPasswordProtected()) {
            printf("The VBA Project '%s' is protected by password to view project properties.", 
                    $presentation->getVbaProject()->getName());
        }
    }
} finally {
    $presentation->dispose();
}

FAQ

Co się dzieje z makrami, gdy 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, na przykład w celu odświeżenia danych?

Nie. Biblioteka nigdy nie wykonuje kodu VBA; wykonanie jest możliwe jedynie 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.