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

Введение

Aspose.Slides предоставляет классы и интерфейсы для работы с макросами и кодом VBA.

Добавление макросов VBA

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

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

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

import jpype
import asposeslides

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

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

presentation = Presentation()
try:
    # Создать новый проект VBA.
    vba_project = VbaProject()
    presentation.setVbaProject(vba_project)

    # Добавить пустой модуль и задать его исходный код.
    module = vba_project.getModules().addEmptyModule("Module")
    module.setSourceCode('Sub Test(oShape As Shape)\n    MsgBox "Test"\nEnd Sub')

    # Создать ссылки на stdole и 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")

    # Добавить ссылки в проект VBA.
    vba_project.getReferences().add(stdole_reference)
    vba_project.getReferences().add(office_reference)

    # Сохранить презентацию.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Удаление макросов VBA

С помощью метода getVbaProject класса Presentation можно удалить макрос VBA.

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

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

import jpype
import asposeslides

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

from asposeslides.api import Presentation, SaveFormat

# Загрузить презентацию, содержащую макрос.
presentation = Presentation("VBA.pptm")
try:
    # Получить доступ к модулю VBA и удалить его.
    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)

    # Сохранить презентацию.
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

Извлечение макросов VBA

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

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

import jpype
import asposeslides

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

from asposeslides.api import Presentation

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

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

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

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

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

from asposeslides.api import Presentation

presentation = Presentation("VBA.pptm")
try:
    # Проверить, содержит ли презентация проект 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

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

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

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

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

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

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