Работа с VBA Macros
Visual Basic за заявления (VBA) за Microsoft Word е прост, но мощен програмен език, който може да се използва за разширяване на функционалността. Aspose.Words API осигурява три класа за достъп до изходния код на проекта VBA:
- На VBAProject Класът осигурява достъп до информация за проекта VBA
- На VBAModuleCollection класът връща колекцията на VBA проектни модули
- На 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"); |
Чети макроси
Aspose.Words Също така дава възможност на потребителите да четат 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 + "Document.dot"); | |
if (doc.VbaProject != null) | |
{ | |
foreach (VbaModule module in doc.VbaProject.Modules) | |
{ | |
Console.WriteLine(module.SourceCode); | |
} | |
} |
Запис или промяна на макроси
Използване 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; |
Клон VBA Проект
С Aspose.Words възможно е също да се клонират проекти на 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(); | |
// Clone the whole project. | |
destDoc.VbaProject = doc.VbaProject.Clone(); | |
destDoc.Save(dataDir + "output.docm"); |
Клон VBA Модул
Можете също да клонирате 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 Референции за проекти, представляващи колекция от препоръки за проекти на 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) : ""; | |
} |