Kelola Proyek VBA dalam Presentasi Menggunakan PHP

Pendahuluan

API Aspose.Slides berisi kelas‑kelas untuk bekerja dengan makro dan kode VBA.

Menambahkan Makro VBA

Aspose.Slides menyediakan kelas VbaProject untuk 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 sebuah instance dari kelas Presentation .
  2. Gunakan konstruktor VbaProject untuk menambahkan proyek VBA baru.
  3. Tambahkan modul ke VbaProject.
  4. Atur kode sumber modul.
  5. Tambahkan referensi ke .
  6. Tambahkan referensi ke Microsoft Office.
  7. Hubungkan referensi dengan proyek VBA.
  8. Simpan presentasi.

Kode PHP ini memperlihatkan cara menambahkan makro VBA dari awal ke sebuah presentasi:

  # Membuat instance dari kelas presentasi
  $pres = new Presentation();
  try {
    # Membuat proyek VBA baru
    $pres->setVbaProject(new VbaProject());
    # Menambahkan modul kosong ke proyek VBA
    $module = $pres->getVbaProject()->getModules()->addEmptyModule("Module");
    # Mengatur kode sumber modul
    $module->setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    # Membuat referensi ke <stdole>
    $stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    # Membuat referensi ke 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");
    # Menambahkan referensi ke proyek VBA
    $pres->getVbaProject()->getReferences()->add($stdoleReference);
    $pres->getVbaProject()->getReferences()->add($officeReference);
    # Menyimpan Presentasi
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Menghapus Makro VBA

Dengan menggunakan properti VbaProject pada kelas Presentation , Anda dapat menghapus makro VBA.

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

Kode PHP ini memperlihatkan cara menghapus makro VBA:

  # Muat presentasi yang berisi makro
  $pres = new Presentation("VBA.pptm");
  try {
    # Mengakses modul Vba dan menghapusnya
    $pres->getVbaProject()->getModules()->remove($pres->getVbaProject()->getModules()->get_Item(0));
    # Menyimpan Presentasi
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Mengekstrak Makro VBA

  1. Buat sebuah instance dari kelas Presentation dan muat presentasi yang berisi makro.
  2. Periksa apakah presentasi berisi Proyek VBA.
  3. Iterasi melalui semua modul yang ada dalam Proyek VBA untuk melihat makro.

Kode PHP ini memperlihatkan cara mengekstrak makro VBA dari sebuah presentasi yang berisi makro:

  # Muat presentasi yang berisi makro
  $pres = new Presentation("VBA.pptm");
  try {
    # Periksa apakah Presentasi berisi Proyek 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();
    }
  }

Memeriksa Apakah Proyek VBA Dilindungi Kata Sandi

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

  1. Buat sebuah instance dari kelas Presentation dan muat presentasi yang berisi makro.
  2. Periksa apakah presentasi berisi VBA project.
  3. Periksa apakah proyek VBA dilindungi kata sandi untuk melihat propertinya.
$presentation = new Presentation("VBA.pptm");
try {
    if ($presentation->getVbaProject() != null) { // Periksa apakah presentasi berisi proyek 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

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

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

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

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

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

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