Làm việc với Macro VBA
Visual Basic cho Ứng dụng (VBA) cho Microsoft Word là ngôn ngữ lập trình đơn giản nhưng mạnh mẽ có thể được sử dụng để mở rộng chức năng. Aspose.Words API cung cấp ba lớp để có quyền truy cập vào mã nguồn dự án VBA:
- Lớp VBAProject cung cấp quyền truy cập vào thông tin dự án VBA
- Lớp VBAModuleCollection trả về tập hợp các module dự án VBA
- Lớp VbaModule cung cấp quyền truy cập vào mô-đun dự án VBA
- Bảng liệt kê VbaModuleType xác định các loại mô hình trong dự án VBA. Mô-đun này có thể là mô-đun thủ tục, mô-đun tài liệu, mô-đun lớp hoặc mô-đun thiết kế
Tạo một dự án VBA
Aspose.Words API cung cấp thuộc tính vba_project để lấy hoặc đặt VbaProject trong tài liệu.
Ví dụ mã sau đây minh họa cách tạo dự án VBA và Mô-đun VBA cùng với các thuộc tính cơ bản, ví dụ như name và type:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
project = aw.vba.VbaProject() | |
project.name = "AsposeProject" | |
doc.vba_project = project | |
# Create a new module and specify a macro source code. | |
module = aw.vba.VbaModule() | |
module.name = "AsposeModule" | |
module.type = aw.vba.VbaModuleType.PROCEDURAL_MODULE | |
module.source_code = "New source code" | |
# Add module to the VBA project. | |
doc.vba_project.modules.add(module) | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.create_vba_project.docm") |
Đọc macro
Aspose.Words cũng cung cấp cho người dùng khả năng đọc macro VBA.
Ví dụ mã sau đây cho thấy cách đọc Macro VBA từ tài liệu:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
if (doc.vba_project != None) : | |
for module in doc.vba_project.modules : | |
print(module.source_code) | |
Viết hoặc sửa đổi macro
Sử dụng Aspose.Words, người dùng có thể sửa đổi macro VBA.
Ví dụ về mã sau đây cho thấy cách sửa đổi Macro VBA bằng thuộc tính source_code:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
project = doc.vba_project | |
newSourceCode = "Test change source code" | |
project.modules[0].source_code = newSourceCode | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.modify_vba_macros.docm") |
Dự án VBA sao chép
Với Aspose.Words cũng có thể sao chép các dự án VBA.
Ví dụ về mã sau đây cho thấy cách sao chép Dự án VBA bằng thuộc tính clone để tạo bản sao của dự án hiện có:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
destDoc = aw.Document() | |
destDoc.vba_project = doc.vba_project.clone() | |
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_project.docm") |
Sao chép mô-đun VBA
Bạn cũng có thể sao chép các mô-đun VBA nếu cần.
Ví dụ về mã sau đây cho thấy cách sao chép Mô-đun VBA bằng thuộc tính clone để tạo bản sao của dự án hiện có:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
destDoc = aw.Document() | |
destDoc.vba_project = aw.vba.VbaProject() | |
copyModule = doc.vba_project.modules.get_by_name("Module1").clone() | |
destDoc.vba_project.modules.add(copyModule) | |
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_module.docm") |
Làm việc với Tài liệu tham khảo dự án VBA
Aspose.Words API cung cấp lớp VbaReferenceCollection để làm việc với Tham chiếu dự án VBA thể hiện một tập hợp các tham chiếu dự án VBA.
Ví dụ về mã sau đây cho biết cách xóa một số tham chiếu khỏi bộ sưu tập các tham chiếu khỏi dự án VBA:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "VBA project.docm") | |
# Find and remove the reference with some LibId path. | |
brokenPath = "brokenPath.dll" | |
references = doc.vba_project.references | |
for i in range(references.count - 1, 0) : | |
reference = doc.vba_project.references.element_at(i) | |
path = get_lib_id_path(reference) | |
if (path == brokenPath) : | |
references.remove_at(i) | |
doc.save(docs_base.artifacts_dir + "WorkingWithVba.remove_broken_ref.docm") |
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
# <summary> | |
# Returns string representing LibId path of a specified reference. | |
# </summary> | |
def get_lib_id_path(self, reference) : | |
if reference.type == aw.vba.VbaReferenceType.REGISTERED or reference.type == aw.vba.VbaReferenceType.ORIGINAL or reference.type == aw.vba.VbaReferenceType.CONTROL : | |
return self.get_lib_id_reference_path(reference.lib_id) | |
elif reference.type == aw.vba.VbaReferenceType.PROJECT : | |
return self.get_lib_id_project_path(reference.lib_id) | |
else : | |
raise RuntimeError() | |
# <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> | |
@staticmethod | |
def get_lib_id_reference_path(libIdReference : str) : | |
if (libIdReference != None) : | |
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> | |
@staticmethod | |
def get_lib_id_project_path(libIdProject : str) : | |
if (libIdProject != None) : | |
return libIdProject.substring(3) | |
return "" | |