Διαχείριση έργων VBA σε παρουσιάσεις με Python

Εισαγωγή

Aspose.Slides παρέχει κλάσεις και διεπαφές για εργασία με μακροεντολές και κώδικα VBA.

Προσθήκη μακροεντολών VBA

Το Aspose.Slides παρέχει την κλάση VbaProject για να δημιουργείτε έργα VBA (και αναφορές έργου) και να επεξεργάζεστε υπάρχοντες μονάδες. Μπορείτε να χρησιμοποιήσετε την κλάση VbaProject για να διαχειριστείτε VBA ενσωματωμένο σε μια παρουσίαση.

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Χρησιμοποιήστε τον κατασκευαστή VbaProject για να προσθέσετε ένα νέο έργο VBA.
  3. Προσθέστε μια μονάδα στο έργο VBA.
  4. Ορίστε τον πηγαίο κώδικα της μονάδας.
  5. Προσθέστε αναφορές στο stdole.
  6. Προσθέστε αναφορές στη Microsoft Office.
  7. Συνδέστε τις αναφορές με το έργο VBA.
  8. Αποθηκεύστε την παρουσίαση.

Αυτός ο κώδικας Python δείχνει πώς να προσθέσετε μια μακροεντολή VBA από την αρχή σε μια παρουσίαση:

import jpype
import asposeslides

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

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

presentation = Presentation()
try:
    # Δημιουργία νέου έργου VBA.
    vba_project = VbaProject()
    presentation.setVbaProject(vba_project)

    # Προσθήκη κενής μονάδας και ορισμός του πηγαίου κώδικα.
    module = vba_project.getModules().addEmptyModule("Module")
    module.setSourceCode('Sub Test(oShape As Shape)\n    MsgBox "Test"\nEnd Sub')

    # Δημιουργία αναφορών σε stdole και 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")

    # Προσθήκη αναφορών στο έργο VBA.
    vba_project.getReferences().add(stdole_reference)
    vba_project.getReferences().add(office_reference)

    # Αποθήκευση της παρουσίασης.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Αφαίρεση μακροεντολών VBA

Χρησιμοποιώντας τη μέθοδο getVbaProject της κλάσης Presentation, μπορείτε να αφαιρέσετε μια μακροεντολή VBA.

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation και φορτώστε την παρουσίαση που περιέχει τη μακροεντολή.
  2. Αποκτήστε πρόσβαση στη μονάδα της μακροεντολής και αφαιρέστε την.
  3. Αποθηκεύστε την τροποποιημένη παρουσίαση.

Αυτός ο κώδικας Python δείχνει πώς να αφαιρέσετε μια μακροεντολή VBA:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

# Φόρτωση της παρουσίασης που περιέχει τη μακροεντολή.
presentation = Presentation("VBA.pptm")
try:
    # Πρόσβαση στη μονάδα VBA και αφαίρεσή της.
    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)

    # Αποθήκευση της παρουσίασης.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Εξαγωγή μακροεντολών VBA

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation και φορτώστε την παρουσίαση που περιέχει τη μακροεντολή.
  2. Ελέγξτε αν η παρουσίαση περιέχει Έργο VBA.
  3. Κάντε επανάληψη σε όλες τις μονάδες που περιέχονται στο Έργο VBA για να προβάλετε τις μακροεντολές.

Αυτός ο κώδικας Python δείχνει πώς να εξαγάγετε μακροεντολές VBA από μια παρουσίαση που περιέχει μακροεντολές:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

# Φόρτωση της παρουσίασης που περιέχει τη μακροεντολή.
presentation = Presentation("VBA.pptm")
try:
    # Έλεγχος εάν η παρουσίαση περιέχει έργο 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()

Έλεγχος εάν ένα Έργο VBA είναι προστατευμένο με κωδικό πρόσβασης

Χρησιμοποιώντας τη μέθοδο VbaProject.isPasswordProtected, μπορείτε να προσδιορίσετε εάν οι ιδιότητες ενός έργου είναι προστατευμένες με κωδικό πρόσβασης.

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation και φορτώστε μια παρουσίαση που περιέχει μακροεντολή.
  2. Ελέγξτε εάν η παρουσίαση περιέχει ένα VBA project.
  3. Ελέγξτε εάν το Έργο VBA είναι προστατευμένο με κωδικό πρόσβασης για να προβάλετε τις ιδιότητές του.
import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("VBA.pptm")
try:
    # Έλεγχος εάν η παρουσίαση περιέχει έργο 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()

Συχνές ερωτήσεις

Τι συμβαίνει με τις μακροεντολές αν αποθηκεύσω την παρουσίαση ως PPTX;

Οι μακροεντολές θα αφαιρεθούν επειδή το PPTX δεν υποστηρίζει VBA. Για να διατηρήσετε τις μακροεντολές, επιλέξτε PPTM, PPSM ή POTM.

Μπορεί το Aspose.Slides να εκτελεί μακροεντολές μέσα σε μια παρουσίαση, για παράδειγμα, για να ενημερώσει δεδομένα;

Όχι. Η βιβλιοθήκη δεν εκτελεί ποτέ κώδικα VBA· η εκτέλεση είναι δυνατή μόνο μέσα στο PowerPoint με τις κατάλληλες ρυθμίσεις ασφαλείας.

Υπάρχει υποστήριξη για τη χρήση ελεγκτών ActiveX συνδεδεμένων με κώδικα VBA;

Ναι, μπορείτε να έχετε πρόσβαση σε υπάρχοντες ActiveX controls, να τροποποιήσετε τις ιδιότητές τους και να τους αφαιρέσετε. Αυτό είναι χρήσιμο όταν οι μακροεντολές αλληλεπιδρούν με ActiveX.