We’re pleased to announce the release of Spire.Presentation 11.7.6. This version adds support for saving macro-enabled files and managing VBA modules, including adding and deleting VBA modules. It also fixes an issue where applying multiple licenses failed to take effect. More details are listed below.
Here is a list of changes made in this release
| Category | ID | Description |
| New Feature | SPIREPPT-660 | Added the FileFormat.Pptm enumeration type to support saving macro-enabled files. |
| New Feature | - | Added support for adding VBA modules.
Presentation ppt = new Presentation();
// Add VBA project to the document
IVbaProject vbaProject = ppt.VbaProject;
vbaProject.Name = "SampleVBAMacro";
vbaProject.CodePage = 936; // Set encoding to support Chinese characters
IVbaModule vbaModule = vbaProject.Modules.Add("SampleModule", VbaModuleType.Module);
vbaModule.SourceCode = @"
Sub ExampleMacro()
' Declare variables
Dim pptPres As Object
Dim pptSlide As Object
Dim pptShape As Object
' Set reference to the current presentation
Set pptPres = ActivePresentation
' Loop through all slides
Dim i As Integer
For i = 1 To pptPres.Slides.Count
Set pptSlide = pptPres.Slides(i)
' Add a title text box to each slide (msoTextOrientationHorizontal = 1)
Set pptShape = pptSlide.Shapes.AddTextbox(1, 50, 50, 600, 50)
pptShape.TextFrame.TextRange.Text = ""Slide "" & i & "" - Auto-generated by macro""
With pptShape.TextFrame.TextRange.Font
.Bold = -1 ' msoTrue = -1
.Size = 24
.Color.RGB = RGB(0, 102, 204)
End With
Next i
' Display completion message
MsgBox ""Macro execution completed! Processed "" & pptPres.Slides.Count & "" slides."", vbInformation, ""Operation Prompt""
End Sub";
ppt.SaveToFile("result.pptm", FileFormat.Pptm);
ppt.Dispose();
|
| New Feature | - | Added support for deleting VBA modules.
// Remove module by name
Presentation ppt1 = new Presentation();
ppt1.LoadFromFile(inputFile);
IVbaModule firstModule = ppt1.VbaProject.Modules[0];
sb.AppendLine("[Remove by Name]");
sb.AppendLine("Module Name: " + firstModule.Name);
sb.AppendLine("Module Type: " + firstModule.Type);
sb.AppendLine("Module Count Before Deletion: " + ppt1.VbaProject.Modules.Count);
ppt1.VbaProject.Modules.Remove(firstModule.Name);
sb.AppendLine("Module Count After Deletion: " + ppt1.VbaProject.Modules.Count);
ppt1.SaveToFile("result1.pptm", FileFormat.Pptm);
ppt1.Dispose();
// Remove module by index
Presentation ppt2 = new Presentation();
ppt2.LoadFromFile(inputFile);
sb.AppendLine("[Remove by Index (0)]");
sb.AppendLine("Module Count Before Deletion: " + ppt2.VbaProject.Modules.Count);
ppt2.VbaProject.Modules.RemoveAt(0);
sb.AppendLine("Module Count After Deletion: " + ppt2.VbaProject.Modules.Count);
ppt2.SaveToFile("result2.pptm", FileFormat.Pptm);
ppt2.Dispose();
// Remove module by VbaModule object (cast to specific type)
Presentation ppt3 = new Presentation();
ppt3.LoadFromFile(inputFile);
IVbaModule moduleObj = ppt3.VbaProject.Modules[4];
VbaModule vbaModule = (VbaModule)moduleObj;
sb.AppendLine("[Remove by Object]");
sb.AppendLine("Module Name: " + vbaModule.Name);
sb.AppendLine("Module Type: " + vbaModule.Type);
sb.AppendLine("Module Count Before Deletion: " + ppt3.VbaProject.Modules.Count);
ppt3.VbaProject.Modules.Remove(vbaModule);
sb.AppendLine("Module Count After Deletion: " + ppt3.VbaProject.Modules.Count);
ppt3.SaveToFile("result3.pptm", FileFormat.Pptm);
ppt3.Dispose();
// Clear all modules
Presentation ppt4 = new Presentation();
ppt4.LoadFromFile(inputFile);
sb.AppendLine("[Clear All]");
sb.AppendLine("Module Count Before Deletion: " + ppt4.VbaProject.Modules.Count);
ppt4.VbaProject.Modules.Clear();
sb.AppendLine("Module Count After Deletion: " + ppt4.VbaProject.Modules.Count);
ppt4.SaveToFile("result4.pptm", FileFormat.Pptm);
ppt4.Dispose();
|
| Bug Fix | - | Fixed an issue where applying multiple licenses failed to take effect. |
Click the link below to download Spire.Presentation 11.7.6: