Praca z makrami VBA
Visual Basic for Applications (VBA) for Microsoft Word to prosty, ale potężny język programowania, którego można użyć do rozszerzenia funkcjonalności. Aspose.Words API udostępnia trzy klasy umożliwiające uzyskanie dostępu do kodu źródłowego projektu VBA:
- Klasa VBAProject zapewnia dostęp do informacji o projekcie VBA
- Klasa VBAModuleCollection zwraca kolekcję modułów projektu VBA
- Klasa VbaModule zapewnia dostęp do modułu projektu VBA
- Wyliczenie VbaModuleType definiuje typy modelu w projekcie VBA. Moduł może być modułem proceduralnym, modułem dokumentu, modułem klasy lub modułem projektanta
Utwórz projekt VBA
Aspose.Words API udostępnia właściwość VbaProject umożliwiającą pobranie lub ustawienie projektu VbaProject w dokumencie.
Poniższy przykład kodu demonstruje sposób tworzenia projektu VBA i modułu VBA wraz z podstawowymi właściwościami, np. Nazwą i Typem:
// 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"); |
Przeczytaj makra
Aspose.Words zapewnia także użytkownikom możliwość odczytu makr VBA.
Poniższy przykład kodu pokazuje, jak czytać makra VBA z dokumentu:
// 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); | |
} | |
} |
Napisz lub zmodyfikuj makra
Korzystając z Aspose.Words, użytkownicy mogą modyfikować makra VBA.
Poniższy przykład kodu pokazuje, jak modyfikować makra VBA przy użyciu właściwości 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; |
Klonuj projekt VBA
Dzięki Aspose.Words możliwe jest również klonowanie projektów VBA.
Poniższy przykład kodu pokazuje, jak sklonować projekt VBA przy użyciu właściwości Clone, która tworzy kopię istniejącego projektu:
// 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"); |
Klonuj moduł VBA
W razie potrzeby możesz także klonować moduły VBA.
Poniższy przykład kodu pokazuje, jak sklonować moduł VBA przy użyciu właściwości Clone, która tworzy kopię istniejącego projektu:
// 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"); |
Pracuj z referencjami projektu VBA
Aspose.Words API udostępnia klasę VbaReferenceCollection do pracy z referencjami projektu VBA reprezentującymi zbiór odniesień do projektów VBA.
Poniższy przykład kodu pokazuje, jak usunąć niektóre odniesienia ze zbioru odniesień z projektu 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) : ""; | |
} |