通过 VBA 的演示文稿
Contents
[
Hide
]
Aspose.Slides.Vba 命名空间包含用于处理宏和 VBA 代码的类和接口。
Note
当您将包含宏的演示文稿转换为其他文件格式(PDF、HTML 等)时,Aspose.Slides 会忽略所有宏(宏不会随生成的文件携带)。
当您向演示文稿添加宏或重新保存包含宏的演示文稿时,Aspose.Slides 仅写入宏的字节。
Aspose.Slides 永不 在演示文稿中运行宏。
添加 VBA 宏
Aspose.Slides 提供了 VbaProject 类,让您可以创建 VBA 项目(及项目引用)并编辑现有模块。您可以使用 IVbaProject 接口来管理嵌入演示文稿中的 VBA。
- 创建 Presentation 类的实例。
- 使用 VbaProject 构造函数添加新的 VBA 项目。
- 向 VbaProject 添加模块。
- 设置模块的源代码。
- 添加对
的引用。 - 添加对 Microsoft Office 的引用。
- 将这些引用关联到 VBA 项目。
- 保存演示文稿。
下面的 C# 代码演示了如何从头向演示文稿添加 VBA 宏:
// 创建 Presentation 类的实例
using (Presentation presentation = new Presentation())
{
// 创建一个新的 VBA 项目
presentation.VbaProject = new VbaProject();
// 向 VBA 项目添加一个空模块
IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
// 设置模块的源代码
module.SourceCode = @"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 项目添加引用
presentation.VbaProject.References.Add(stdoleReference);
presentation.VbaProject.References.Add(officeReference);
// 保存演示文稿
presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}
您可能想了解 Aspose Macro Remover,这是一款免费网页版应用,可用于从 PowerPoint、Excel 和 Word 文档中移除宏。
删除 VBA 宏
通过 Presentation 类下的 VbaProject 属性,您可以移除 VBA 宏。
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 访问宏模块并将其移除。
- 保存修改后的演示文稿。
下面的 C# 代码演示了如何移除 VBA 宏:
// 加载包含宏的演示文稿
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
// 访问 Vba 模块并将其移除
presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);
// 保存演示文稿
presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}
提取 VBA 宏
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 检查演示文稿是否包含 VBA 项目。
- 遍历 VBA 项目中包含的所有模块以查看宏。
下面的 C# 代码演示了如何从包含宏的演示文稿中提取 VBA 宏:
// 加载包含宏的演示文稿
using (Presentation pres = new Presentation("VBA.pptm"))
{
if (pres.VbaProject != null) // 检查演示文稿是否包含 VBA 项目
{
foreach (IVbaModule module in pres.VbaProject.Modules)
{
Console.WriteLine(module.Name);
Console.WriteLine(module.SourceCode);
}
}
}
检查 VBA 项目是否受密码保护
使用 IVbaProject.IsPasswordProtected 属性,您可以确定项目属性是否受密码保护。
- 创建 Presentation 类的实例并加载包含宏的演示文稿。
- 检查演示文稿是否包含 VBA project。
- 检查该 VBA 项目是否受密码保护以查看其属性。
using (Presentation presentation = new Presentation("VBA.pptm"))
{
if (presentation.VbaProject != null) // 检查演示文稿是否包含 VBA 项目。
{
if (presentation.VbaProject.IsPasswordProtected)
{
Console.WriteLine($"The VBA Project '{presentation.VbaProject.Name}' is protected by password to view project properties.");
}
}
}
常见问题
如果我将演示文稿保存为 PPTX,会发生什么情况?
宏将被移除,因为 PPTX 不支持 VBA。若需保留宏,请选择 PPTM、PPSM 或 POTM。
Aspose.Slides 能在演示文稿中运行宏,例如刷新数据吗?
不能。该库永不执行 VBA 代码;只有在 PowerPoint 中且安全设置允许时才可能运行宏。
是否支持使用链接到 VBA 代码的 ActiveX 控件?
支持,您可以访问现有的 ActiveX controls,修改其属性并将其移除。这在宏与 ActiveX 交互时非常有用。