Kelola Proyek VBA dalam Presentasi Menggunakan Python

Pendahuluan

Aspose.Slides menyediakan kelas dan antarmuka untuk bekerja dengan makro dan kode VBA.

Menambahkan Makro VBA

Aspose.Slides menyediakan kelas VbaProject yang memungkinkan Anda membuat proyek VBA (dan referensi proyek) serta mengedit modul yang ada. Anda dapat menggunakan kelas VbaProject untuk mengelola VBA yang tertanam dalam sebuah presentasi.

  1. Buat instance dari kelas Presentation.
  2. Gunakan konstruktor VbaProject untuk menambahkan proyek VBA baru.
  3. Tambahkan modul ke proyek VBA.
  4. Setel kode sumber modul.
  5. Tambahkan referensi ke stdole.
  6. Tambahkan referensi ke Microsoft Office.
  7. Asosiasikan referensi dengan proyek VBA.
  8. Simpan presentasi.

Kode Python berikut menunjukkan cara menambahkan makro VBA dari awal ke sebuah presentasi:

import jpype
import asposeslides

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

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

presentation = Presentation()
try:
    # Buat proyek VBA baru.
    vba_project = VbaProject()
    presentation.setVbaProject(vba_project)

    # Tambahkan modul kosong dan atur kode sumbernya.
    module = vba_project.getModules().addEmptyModule("Module")
    module.setSourceCode('Sub Test(oShape As Shape)\n    MsgBox "Test"\nEnd Sub')

    # Buat referensi ke stdole dan 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")

    # Tambahkan referensi ke proyek VBA.
    vba_project.getReferences().add(stdole_reference)
    vba_project.getReferences().add(office_reference)

    # Simpan presentasi.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Menghapus Makro VBA

Dengan menggunakan metode getVbaProject dari kelas Presentation, Anda dapat menghapus makro VBA.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
  2. Akses modul makro dan hapus.
  3. Simpan presentasi yang telah dimodifikasi.

Kode Python berikut menunjukkan cara menghapus makro VBA:

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

# Muat presentasi yang berisi makro.
presentation = Presentation("VBA.pptm")
try:
    # Akses modul VBA dan hapus.
    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)

    # Simpan presentasi.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Mengekstrak Makro VBA

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
  2. Periksa apakah presentasi berisi Proyek VBA.
  3. Lakukan perulangan pada semua modul yang terdapat dalam Proyek VBA untuk melihat makro.

Kode Python berikut menunjukkan cara mengekstrak makro VBA dari sebuah presentasi yang berisi makro:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

# Muat presentasi yang berisi makro.
presentation = Presentation("VBA.pptm")
try:
    # Periksa apakah presentasi berisi proyek 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()

Memeriksa Apakah Proyek VBA Dilindungi Kata Sandi

Dengan menggunakan metode VbaProject.isPasswordProtected, Anda dapat menentukan apakah properti proyek dilindungi kata sandi.

  1. Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
  2. Periksa apakah presentasi berisi proyek VBA.
  3. Periksa apakah proyek VBA dilindungi kata sandi untuk melihat propertinya.
import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("VBA.pptm")
try:
    # Periksa apakah presentasi berisi proyek 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

Apa yang terjadi pada makro jika saya menyimpan presentasi sebagai PPTX?

Makro akan dihapus karena PPTX tidak mendukung VBA. Untuk menyimpan makro, pilih PPTM, PPSM, atau POTM.

Apakah Aspose.Slides dapat menjalankan makro di dalam presentasi, misalnya untuk menyegarkan data?

Tidak. Perpustakaan tidak pernah mengeksekusi kode VBA; eksekusi hanya dimungkinkan di dalam PowerPoint dengan pengaturan keamanan yang tepat.

Apakah bekerja dengan kontrol ActiveX yang terhubung ke kode VBA didukung?

Ya, Anda dapat mengakses kontrol ActiveX yang ada, memodifikasi propertinya, dan menghapusnya. Ini berguna ketika makro berinteraksi dengan ActiveX.