通过 VBA 进行演示

Aspose.Slides.Vba 命名空间包含用于处理宏和 VBA 代码的类和接口。

添加 VBA 宏

Aspose.Slides 提供了 VbaProject 类,允许您创建 VBA 项目(及项目引用)并编辑现有模块。您可以使用 IVbaProject 接口来管理嵌入在演示文稿中的 VBA。

  1. 创建一个 Presentation 类的实例。
  2. 使用 VbaProject 构造函数添加一个新的 VBA 项目。
  3. 向 VbaProject 添加一个模块。
  4. 设置模块源代码。
  5. 添加对 的引用。
  6. 添加对 Microsoft Office 的引用。
  7. 将引用与 VBA 项目关联。
  8. 保存演示文稿。

以下 C# 代码演示如何从头开始向演示文稿添加一个 VBA 宏:

    // 创建演示文稿类的实例
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);
}

移除 VBA 宏

使用 Presentation 类下的 VbaProject 属性,您可以移除一个 VBA 宏。

  1. 创建一个 Presentation 类的实例并加载包含宏的演示文稿。
  2. 访问宏模块并将其移除。
  3. 保存修改后的演示文稿。

以下 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 宏

  1. 创建一个 Presentation 类的实例并加载包含宏的演示文稿。
  2. 检查演示文稿是否包含 VBA 项目。
  3. 循环遍历 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 属性,您可以检查项目属性是否受到密码保护。

  1. 创建一个 Presentation 类的实例并加载包含宏的演示文稿。
  2. 检查演示文稿是否包含 VBA 项目
  3. 检查 VBA 项目是否受到密码保护,以查看项目属性。

以下 C# 代码演示该操作:

using (Presentation pres = new Presentation("VBA.pptm"))
{
    if (pres.VbaProject == null) // 检查演示文稿是否包含 VBA 项目
        return;

    if (pres.VbaProject.IsPasswordProtected)
    {
        Console.WriteLine("VBA 项目 '" + pres.VbaProject.Name +
                            "' 受到密码保护以查看项目属性。");
    }
}