Kelola Proyek VBA dalam Presentasi Menggunakan Python
Pendahuluan
Aspose.Slides menyediakan kelas dan antarmuka untuk bekerja dengan makro dan kode VBA.
Warning
Saat Anda mengonversi presentasi yang berisi makro ke format file yang berbeda (PDF, HTML, dll.), Aspose.Slides mengabaikan semua makro (makro tidak dibawa ke file hasil).
Saat Anda menambahkan makro ke presentasi atau menyimpan ulang presentasi yang berisi makro, Aspose.Slides hanya menulis byte untuk makro.
Aspose.Slides tidak pernah menjalankan makro dalam sebuah presentasi.
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.
- Buat instance dari kelas Presentation.
- Gunakan konstruktor VbaProject untuk menambahkan proyek VBA baru.
- Tambahkan modul ke proyek VBA.
- Setel kode sumber modul.
- Tambahkan referensi ke
stdole. - Tambahkan referensi ke Microsoft Office.
- Asosiasikan referensi dengan proyek VBA.
- 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()
Note
Anda mungkin ingin melihat Aspose Macro Remover, yang merupakan aplikasi web gratis untuk menghapus makro dari dokumen PowerPoint, Excel, dan Word.Menghapus Makro VBA
Dengan menggunakan metode getVbaProject dari kelas Presentation, Anda dapat menghapus makro VBA.
- Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
- Akses modul makro dan hapus.
- 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
- Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
- Periksa apakah presentasi berisi Proyek VBA.
- 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.
- Buat instance dari kelas Presentation dan muat presentasi yang berisi makro.
- Periksa apakah presentasi berisi proyek VBA.
- 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.