使用 Python 在演示文稿中管理 VBA 项目
Contents
[
Hide
]
介绍
Aspose.Slides 提供用于处理宏和 VBA 代码的类和接口。
警告
当您将包含宏的演示文稿转换为其他文件格式(PDF、HTML 等)时,Aspose.Slides 会忽略所有宏(宏不会携带到生成的文件中)。
当您向演示文稿添加宏或重新保存包含宏的演示文稿时,Aspose.Slides 仅写入宏的字节。
Aspose.Slides 永不运行演示文稿中的宏。
添加 VBA 宏
Aspose.Slides 提供 VbaProject 类,以便您创建 VBA 项目(及项目引用)并编辑现有模块。您可以使用 VbaProject 类来管理嵌入在演示文稿中的 VBA。
- 创建 Presentation 类的实例。
- 使用 VbaProject 构造函数添加新 VBA 项目。
- 向 VBA 项目添加模块。
- 设置模块源代码。
- 添加对
stdole的引用。 - 添加对 Microsoft Office 的引用。
- 将引用关联到 VBA 项目。
- 保存演示文稿。
以下 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()
注意
您可以试用 Aspose 宏移除工具,这是一款免费网页版应用,用于从 PowerPoint、Excel 和 Word 文档中移除宏。删除 VBA 宏
通过 Presentation 类的 getVbaProject 方法,您可以删除 VBA 宏。
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 访问宏模块并将其删除。
- 保存修改后的演示文稿。
以下 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 宏
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 检查演示文稿是否包含 VBA 项目。
- 遍历 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 方法,您可以确定项目属性是否受密码保护。
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 检查演示文稿是否包含 VBA 项目。
- 检查 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()
常见问题
如果我将演示文稿保存为 PPTX,会发生什么?
宏会被移除,因为 PPTX 不支持 VBA。若要保留宏,请选择 PPTM、PPSM 或 POTM。
Aspose.Slides 能运行演示文稿中的宏,例如刷新数据吗?
不能。库从不执行 VBA 代码;只有在 PowerPoint 中且具备相应安全设置时才可能执行。
是否支持使用与 VBA 代码关联的 ActiveX 控件?
是的,您可以访问现有的 ActiveX 控件,修改其属性并将其移除。这在宏与 ActiveX 交互时非常有用。