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

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

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

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

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

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

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

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

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

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

// Загружает презентацию, содержащую макрос
Presentation 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 (pres != null) pres.dispose();
}

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

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

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

// Загружает презентацию, содержащую макрос
Presentation pres = new Presentation("VBA.pptm");
try {
    if (pres.getVbaProject() != null) // Проверяет, содержит ли презентация VBA‑проект
    {
        for (IVbaModule module : pres.getVbaProject().getModules())
        {
            System.out.println(module.getName());
            System.out.println(module.getSourceCode());
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

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

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

  1. Создайте экземпляр класса Presentation и загрузите презентацию, содержащую макрос.
  2. Проверьте, содержит ли презентация VBA‑проект.
  3. Проверьте, защищён ли VBA‑проект паролем, чтобы просмотреть его свойства.
Presentation presentation = new Presentation("VBA.pptm");
try {
    if (presentation.getVbaProject() != null) { // Проверяет, содержит ли презентация VBA‑проект.
        if (presentation.getVbaProject().isPasswordProtected()) {
            System.out.printf("The VBA Project '%s' is protected by password to view project properties.", 
                    presentation.getVbaProject().getName());
        }
    }
} finally {
    presentation.dispose();
}

Часто задаваемые вопросы

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

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

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