Робота з VBA Macros
Visual Basic для додатків (VBA) Microsoft Word - проста, але потужна мова програмування, яка може бути використана для розширення функціональності. Aspose.Words API надає три класи для доступу до коду VBA:
- У VBAProject Клас надає доступ до інформації про проект ВБА
- У VBAModuleCollection Клас повертає колекцію модулів проекту ВБА
- У VbaModule Клас надає доступ до модуля проекту VBA
- У VbaModuleType анумація визначає типи моделі в проекті VBA. Модуль може бути процедурний модуль, модуль документа, модуль класу або модуль дизайнера
Створення проекту VBA
Aspose.Words API забезпечує VbaProject майно, щоб отримати або встановити VbaProject в документі.
Приклад коду показує, як створити проект VBA та модуль VBA разом з базовими властивостями, наприклад, Ім’я та тип:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(); | |
| // Create a new VBA project. | |
| VbaProject project = new VbaProject(); | |
| project.Name = "AsposeProject"; | |
| doc.VbaProject = project; | |
| // Create a new module and specify a macro source code. | |
| VbaModule module = new VbaModule(); | |
| module.Name = "AsposeModule"; | |
| module.Type = VbaModuleType.ProceduralModule; | |
| module.SourceCode = "New source code"; | |
| // Add module to the VBA project. | |
| doc.VbaProject.Modules.Add(module); | |
| doc.Save(dataDir + "VbaProject_out.docm"); |
Читати Macros
Aspose.Words також надає користувачам можливість читати макроси VBA.
Приклад коду показує, як читати VBA Macros з документа:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(dataDir + "Document.dot"); | |
| if (doc.VbaProject != null) | |
| { | |
| foreach (VbaModule module in doc.VbaProject.Modules) | |
| { | |
| Console.WriteLine(module.SourceCode); | |
| } | |
| } |
Написати або змінити Macros
Використання Aspose.Words, користувачі можуть змінювати макроси VBA.
Приклад коду показує, як змінити VBA Macros за допомогою SourceCode майно:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(dataDir + "test.docm"); | |
| VbaProject project = doc.VbaProject; | |
| const string newSourceCode = "Test change source code"; | |
| // Choose a module, and set a new source code. | |
| project.Modules[0].SourceCode = newSourceCode; |
Клон ВБА Проекти
З Aspose.Words Також можна клонувати проекти ВБА.
Приклад коду показує, як клонувати проект ВБА за допомогою програми Clone майно, яке створює копію існуючого проекту:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
| VbaProject project = doc.VbaProject; | |
| Document destDoc = new Document(); | |
| // Clone the whole project. | |
| destDoc.VbaProject = doc.VbaProject.Clone(); | |
| destDoc.Save(dataDir + "output.docm"); |
Клон ВБА Модуль
Ви також можете налаштувати модулі VBA, якщо це необхідно.
Приклад коду показує, як налаштувати модуль VBA за допомогою Clone майно, яке створює копію існуючого проекту:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
| VbaProject project = doc.VbaProject; | |
| Document destDoc = new Document(); | |
| destDoc.VbaProject = new VbaProject(); | |
| // Clone a single module. | |
| VbaModule copyModule = doc.VbaProject.Modules["Module1"].Clone(); | |
| destDoc.VbaProject.Modules.Add(copyModule); | |
| destDoc.Save(dataDir + "output.docm"); |
Робота з сертифікатами проекту VBA
Aspose.Words API забезпечує VbaReferenceCollection Клас роботи з VBA Project Посилання, що представляють колекцію довідок проєкту VBA.
Приклад коду показує, як видалити деякі посилання з колекції посилань з проекту VBA:
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| Document doc = new Document(dataDir + "VbaProject.docm"); | |
| // Find and remove the reference with some LibId path. | |
| const string brokenPath = "brokenPath.dll"; | |
| VbaReferenceCollection references = doc.VbaProject.References; | |
| for (int i = references.Count - 1; i >= 0; i--) | |
| { | |
| VbaReference reference = doc.VbaProject.References.ElementAt(i); | |
| string path = GetLibIdPath(reference); | |
| if (path == brokenPath) | |
| references.RemoveAt(i); | |
| } | |
| doc.Save(dataDir + "NoBrokenRef.docm"); |
| // For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
| /// <summary> | |
| /// Returns string representing LibId path of a specified reference. | |
| /// </summary> | |
| private static string GetLibIdPath(VbaReference reference) | |
| { | |
| switch (reference.Type) | |
| { | |
| case VbaReferenceType.Registered: | |
| case VbaReferenceType.Original: | |
| case VbaReferenceType.Control: | |
| return GetLibIdReferencePath(reference.LibId); | |
| case VbaReferenceType.Project: | |
| return GetLibIdProjectPath(reference.LibId); | |
| default: | |
| throw new ArgumentOutOfRangeException(); | |
| } | |
| } | |
| /// <summary> | |
| /// Returns path from a specified identifier of an Automation type library. | |
| /// </summary> | |
| /// <remarks> | |
| /// Please see details for the syntax at [MS-OVBA], 2.1.1.8 LibidReference. | |
| /// </remarks> | |
| private static string GetLibIdReferencePath(string libIdReference) | |
| { | |
| if (libIdReference != null) | |
| { | |
| string[] refParts = libIdReference.Split('#'); | |
| if (refParts.Length > 3) | |
| return refParts[3]; | |
| } | |
| return ""; | |
| } | |
| /// <summary> | |
| /// Returns path from a specified identifier of an Automation type library. | |
| /// </summary> | |
| /// <remarks> | |
| /// Please see details for the syntax at [MS-OVBA], 2.1.1.12 ProjectReference. | |
| /// </remarks> | |
| private static string GetLibIdProjectPath(string libIdProject) | |
| { | |
| return (libIdProject != null) ? libIdProject.Substring(3) : ""; | |
| } |