Spire.Presentation 11.7.6 现已发布。该版本新增支持保存宏文件以及管理 VBA 模块,包括添加和删除 VBA 模块。同时,修复了应用多个许可证不生效的问题。详情如下。
新功能:
- 新增 FileFormat.Pptm 枚举类型,支持保存宏文件。
- 支持添加 VBA 模块。
- 支持删除 VBA 模块。
Presentation ppt = new Presentation();
//添加VBA项目到文档
IVbaProject vbaProject = ppt.VbaProject;
vbaProject.Name = "SampleVBAMacro";
vbaProject.CodePage = 936; //设置编码,支持中文
IVbaModule vbaModule = vbaProject.Modules.Add("SampleModule", VbaModuleType.Module);
vbaModule.SourceCode = @"
Sub ExampleMacro()
' 声明变量
Dim pptPres As Object
Dim pptSlide As Object
Dim pptShape As Object
' 设置引用到当前演示文稿
Set pptPres = ActivePresentation
' 遍历所有幻灯片
Dim i As Integer
For i = 1 To pptPres.Slides.Count
Set pptSlide = pptPres.Slides(i)
' 为每张幻灯片添加标题文本 (msoTextOrientationHorizontal = 1)
Set pptShape = pptSlide.Shapes.AddTextbox(1, 50, 50, 600, 50)
pptShape.TextFrame.TextRange.Text = ""幻灯片 "" & i & "" - 由宏自动生成""
With pptShape.TextFrame.TextRange.Font
.Bold = -1 ' msoTrue = -1
.Size = 24
.Color.RGB = RGB(0, 102, 204)
End With
Next i
' 显示完成消息
MsgBox ""宏执行完成!已处理 "" & pptPres.Slides.Count & "" 张幻灯片。"", vbInformation, ""操作提示""
End Sub";
ppt.SaveToFile("result.pptm", FileFormat.Pptm);
ppt.Dispose();
//按名称移除模块
Presentation ppt1 = new Presentation();
ppt1.LoadFromFile(inputFile);
IVbaModule firstModule = ppt1.VbaProject.Modules[0];
sb.AppendLine("【按名称移除】");
sb.AppendLine("模块名称:" + firstModule.Name);
sb.AppendLine("模块类型:" + firstModule.Type);
sb.AppendLine("删除前模块数量:" + ppt1.VbaProject.Modules.Count);
ppt1.VbaProject.Modules.Remove(firstModule.Name);
sb.AppendLine("删除后模块数量:" + ppt1.VbaProject.Modules.Count);
ppt1.SaveToFile("result1.pptm", FileFormat.Pptm);
ppt1.Dispose();
//按索引移除模块
Presentation ppt2 = new Presentation();
ppt2.LoadFromFile(inputFile);
sb.AppendLine("【按索引移除(0)】");
sb.AppendLine("删除前模块数量:" + ppt2.VbaProject.Modules.Count);
ppt2.VbaProject.Modules.RemoveAt(0);
sb.AppendLine("删除后模块数量:" + ppt2.VbaProject.Modules.Count);
ppt2.SaveToFile("result2.pptm", FileFormat.Pptm);
ppt2.Dispose();
//按VbaModule对象移除模块(强制转换为具体类型)
Presentation ppt3 = new Presentation();
ppt3.LoadFromFile(inputFile);
IVbaModule moduleObj = ppt3.VbaProject.Modules[4];
VbaModule vbaModule = (VbaModule)moduleObj;
sb.AppendLine("【按对象移除】");
sb.AppendLine("模块名称:" + vbaModule.Name);
sb.AppendLine("模块类型:" + vbaModule.Type);
sb.AppendLine("删除前模块数量:" + ppt3.VbaProject.Modules.Count);
ppt3.VbaProject.Modules.Remove(vbaModule);
sb.AppendLine("删除后模块数量:" + ppt3.VbaProject.Modules.Count);
ppt3.SaveToFile("result3.pptm", FileFormat.Pptm);
ppt3.Dispose();
//清空所有模块
Presentation ppt4 = new Presentation();
ppt4.LoadFromFile(inputFile);
sb.AppendLine("【清空Clear】");
sb.AppendLine("删除前模块数量:" + ppt4.VbaProject.Modules.Count);
ppt4.VbaProject.Modules.Clear();
sb.AppendLine("删除后模块数量:" + ppt4.VbaProject.Modules.Count);
ppt4.SaveToFile("result4.pptm", FileFormat.Pptm);
问题修复:
- 修复了应用多个许可证不生效的问题。
获取 Spire.Presentation 11.7.6 请点击:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html







