Управление VBA-проектами в презентациях с использованием PHP

Добавить VBA макросы

Aspose.Slides предоставляет класс VbaProject, позволяющий создавать VBA‑проекты (и ссылки на проекты) и редактировать существующие модули. Вы можете использовать класс VbaProject для управления VBA, встроенным в презентацию.

  1. Создайте экземпляр класса Presentation.
  2. Используйте конструктор VbaProject для добавления нового VBA‑проекта.
  3. Добавьте модуль в VbaProject.
  4. Установите исходный код модуля.
  5. Добавьте ссылки на .
  6. Добавьте ссылки на Microsoft Office.
  7. Свяжите ссылки с VBA‑проектом.
  8. Сохраните презентацию.

Этот PHP‑код показывает, как добавить VBA‑макрос с нуля в презентацию:

  # Создаёт экземпляр класса презентации
  $pres = new Presentation();
  try {
    # Создаёт новый VBA‑проект
    $pres->setVbaProject(new VbaProject());
    # Добавляет пустой модуль в VBA‑проект
    $module = $pres->getVbaProject()->getModules()->addEmptyModule("Module");
    # Устанавливает исходный код модуля
    $module->setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    # Создаёт ссылку на <stdole>
    $stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    # Создаёт ссылку на 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");
    # Добавляет ссылки в VBA‑проект
    $pres->getVbaProject()->getReferences()->add($stdoleReference);
    $pres->getVbaProject()->getReferences()->add($officeReference);
    # Сохраняет презентацию
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Удалить VBA макросы

Используя свойство VbaProject, доступное в классе Presentation, вы можете удалить VBA‑макрос.

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Получите доступ к модулю макроса и удалите его.
  3. Сохраните изменённую презентацию.

Этот PHP‑код показывает, как удалить VBA‑макрос:

  # Загружает презентацию, содержащую макрос
  $pres = new Presentation("VBA.pptm");
  try {
    # Получает доступ к модулю VBA и удаляет его
    $pres->getVbaProject()->getModules()->remove($pres->getVbaProject()->getModules()->get_Item(0));
    # Сохраняет презентацию
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Извлечь VBA макросы

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Проверьте, содержит ли презентация VBA‑проект.
  3. Переберите все модули, содержащиеся в VBA‑проекте, чтобы просмотреть макросы.

Этот PHP‑код показывает, как извлечь VBA‑макросы из презентации, содержащей макросы:

  # Загружает презентацию, содержащую макрос
  $pres = new Presentation("VBA.pptm");
  try {
    # Проверяет, содержит ли презентация 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();
    }
  }

Проверить, защищён ли VBA‑проект паролем

С помощью метода VbaProject::isPasswordProtected вы можете определить, защищены ли свойства проекта паролем.

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Проверьте, содержит ли презентация VBA проект.
  3. Проверьте, защищён ли VBA‑проект паролем, чтобы просмотреть его свойства.
$presentation = new Presentation("VBA.pptm");
try {
    if ($presentation->getVbaProject() != null) { // Проверяет, содержит ли презентация 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

Что происходит с макросами, если я сохраняю презентацию как PPTX?

Макросы будут удалены, поскольку формат PPTX не поддерживает VBA. Чтобы сохранить макросы, выбирайте PPTM, PPSM или POTM.

Может ли Aspose.Slides выполнять макросы внутри презентации, например, обновлять данные?

Нет. Библиотека никогда не выполняет код VBA; выполнение возможно только в PowerPoint при соответствующих настройках безопасности.

Поддерживается ли работа с элементами управления ActiveX, связанными с кодом VBA?

Да, вы можете получить доступ к существующим ActiveX controls, изменять их свойства и удалять их. Это полезно, когда макросы взаимодействуют с ActiveX.