Gestionar proyectos VBA en presentaciones usando Python
Introducción
Aspose.Slides proporciona clases e interfaces para trabajar con macros y código VBA.
Warning
Al convertir una presentación que contiene macros a otro formato de archivo (PDF, HTML, etc.), Aspose.Slides ignora todas las macros (las macros no se transportan al archivo resultante).
Al añadir macros a una presentación o volver a guardar una presentación que contiene macros, Aspose.Slides simplemente escribe los bytes de las macros.
Aspose.Slides nunca ejecuta las macros en una presentación.
Añadir macros VBA
Aspose.Slides proporciona la clase VbaProject para permitirle crear proyectos VBA (y referencias de proyectos) y editar módulos existentes. Puede usar la clase VbaProject para gestionar VBA incrustado en una presentación.
- Crear una instancia de la clase Presentation.
- Utilizar el constructor de VbaProject para añadir un nuevo proyecto VBA.
- Añadir un módulo al proyecto VBA.
- Establecer el código fuente del módulo.
- Añadir referencias a
stdole. - Añadir referencias a Microsoft Office.
- Asociar las referencias con el proyecto VBA.
- Guardar la presentación.
Este código Python le muestra cómo añadir una macro VBA desde cero a una presentación:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VbaProject, VbaReferenceOleTypeLib
presentation = Presentation()
try:
# Crear un nuevo proyecto VBA.
vba_project = VbaProject()
presentation.setVbaProject(vba_project)
# Añadir un módulo vacío y establecer su código fuente.
module = vba_project.getModules().addEmptyModule("Module")
module.setSourceCode('Sub Test(oShape As Shape)\n MsgBox "Test"\nEnd Sub')
# Crear referencias a stdole y 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")
# Añadir referencias al proyecto VBA.
vba_project.getReferences().add(stdole_reference)
vba_project.getReferences().add(office_reference)
# Guardar la presentación.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
Note
Puede que desee probar el Aspose Macro Remover, una aplicación web gratuita que se usa para eliminar macros de documentos PowerPoint, Excel y Word.Eliminar macros VBA
Usando el método getVbaProject de la clase Presentation, puede eliminar una macro VBA.
- Crear una instancia de la clase Presentation y cargar la presentación que contiene la macro.
- Acceder al módulo de la macro y eliminarlo.
- Guardar la presentación modificada.
Este código Python le muestra cómo eliminar una macro VBA:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
# Cargar la presentación que contiene la macro.
presentation = Presentation("VBA.pptm")
try:
# Acceder al módulo VBA y eliminarlo.
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)
# Guardar la presentación.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
Extraer macros VBA
- Crear una instancia de la clase Presentation y cargar la presentación que contiene la macro.
- Comprobar si la presentación contiene un proyecto VBA.
- Recorrer todos los módulos contenidos en el proyecto VBA para ver las macros.
Este código Python le muestra cómo extraer macros VBA de una presentación que contiene macros:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
# Cargar la presentación que contiene la macro.
presentation = Presentation("VBA.pptm")
try:
# Comprobar si la presentación contiene un proyecto 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()
Comprobar si un proyecto VBA está protegido con contraseña
Usando el método VbaProject.isPasswordProtected, puede determinar si las propiedades de un proyecto están protegidas con contraseña.
- Crear una instancia de la clase Presentation y cargar una presentación que contiene una macro.
- Comprobar si la presentación contiene un VBA project.
- Verificar si el proyecto VBA está protegido con contraseña para ver sus propiedades.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("VBA.pptm")
try:
# Comprobar si la presentación contiene un proyecto 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
¿Qué ocurre con las macros si guardo la presentación como PPTX?
Las macros se eliminarán porque PPTX no admite VBA. Para conservar las macros, elija PPTM, PPSM o POTM.
¿Puede Aspose.Slides ejecutar macros dentro de una presentación para, por ejemplo, actualizar datos?
No. La biblioteca nunca ejecuta código VBA; la ejecución solo es posible dentro de PowerPoint con la configuración de seguridad adecuada.
¿Se admite trabajar con controles ActiveX vinculados a código VBA?
Sí, puede acceder a los ActiveX controls, modificar sus propiedades y eliminarlos. Esto es útil cuando las macros interactúan con ActiveX.