مدیریت پروژههای VBA در ارائهها با استفاده از پایتون
مقدمه
Aspose.Slides کلاسها و اینترفیسهایی برای کار با ماکروها و کد VBA فراهم میکند.
Warning
هنگامی که یک ارائه حاوی ماکروها را به فرمت فایل دیگری (PDF، HTML و غیره) تبدیل میکنید، Aspose.Slides تمام ماکروها را نادیده میگیرد (ماکروها به فایل خروجی منتقل نمیشوند).
هنگامی که ماکروها را به یک ارائه اضافه میکنید یا ارائهای حاوی ماکروها را دوباره ذخیره میکنید، Aspose.Slides به سادگی بایتهای ماکروها را مینویسد.
Aspose.Slides هرگز ماکروهای موجود در یک ارائه را اجرا نمیکند.
افزودن ماکروهای VBA
Aspose.Slides کلاس VbaProject را برای ایجاد پروژههای VBA (و مراجع پروژه) و ویرایش ماژولهای موجود فراهم میکند. میتوانید از کلاس VbaProject برای مدیریت VBA جاسازیشده در یک ارائه استفاده کنید.
- یک نمونه از کلاس Presentation ایجاد کنید.
- از سازنده VbaProject برای افزودن یک پروژه VBA جدید استفاده کنید.
- یک ماژول به پروژه VBA اضافه کنید.
- کد منبع ماژول را تنظیم کنید.
- مراجع به
stdoleرا اضافه کنید. - مراجع به Microsoft Office را اضافه کنید.
- مراجع را به پروژه VBA پیوست کنید.
- ارائه را ذخیره کنید.
این کد پایتون نشان میدهد که چگونه یک ماکرو VBA را از ابتدا به یک ارائه اضافه کنید:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, VbaProject, VbaReferenceOleTypeLib
presentation = Presentation()
try:
# ایجاد یک پروژه VBA جدید.
vba_project = VbaProject()
presentation.setVbaProject(vba_project)
# افزودن یک ماژول خالی و تنظیم کد منبع آن.
module = vba_project.getModules().addEmptyModule("Module")
module.setSourceCode('Sub Test(oShape As Shape)\n MsgBox "Test"\nEnd Sub')
# ایجاد مراجع به stdole و Microsoft Office.
stdole_reference = VbaReferenceOleTypeLib("stdole", r"*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation")
office_reference = VbaReferenceOleTypeLib("Office", r"*\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL#Microsoft Office 14.0 Object Library")
# افزودن مراجع به پروژه VBA.
vba_project.getReferences().add(stdole_reference)
vba_project.getReferences().add(office_reference)
# ذخیرهٔ ارائه.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
Note
ممکن است بخواهید Aspose Macro Remover را بررسی کنید که یک برنامه وب رایگان برای حذف ماکروها از اسناد PowerPoint، Excel و Word است.حذف ماکروهای VBA
با استفاده از متد getVbaProject کلاس Presentation میتوانید یک ماکرو VBA را حذف کنید.
- یک نمونه از کلاس Presentation ایجاد کنید و ارائه حاوی ماکرو را بارگذاری کنید.
- به ماژول ماکرو دسترسی پیدا کنید و آن را حذف کنید.
- ارائه تغییر یافته را ذخیره کنید.
این کد پایتون نشان میدهد که چگونه یک ماکرو VBA را حذف کنید:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
# بارگذاری ارائه حاوی ماکرو.
presentation = Presentation("VBA.pptm")
try:
# دسترسی به ماژول VBA و حذف آن.
vba_project = presentation.getVbaProject()
if vba_project is not None and len(list(vba_project.getModules())) > 0:
module = vba_project.getModules().get_Item(0)
vba_project.getModules().remove(module)
# ذخیرهٔ ارائه.
presentation.save("test.pptm", SaveFormat.Pptm)
finally:
presentation.dispose()
استخراج ماکروهای VBA
- یک نمونه از کلاس Presentation ایجاد کنید و ارائه حاوی ماکرو را بارگذاری کنید.
- بررسی کنید آیا ارائه حاوی یک پروژه VBA است یا نه.
- در تمام ماژولهای موجود در پروژه VBA حلقه بزنید تا ماکروها را مشاهده کنید.
این کد پایتون نشان میدهد که چگونه ماکروهای VBA را از یک ارائه حاوی ماکرو استخراج کنید:
import jpade
import asposeslides
if not jpade.isJVMStarted():
jpade.startJVM()
from asposeslides.api import Presentation
# بارگذاری ارائه حاوی ماکرو.
presentation = Presentation("VBA.pptm")
try:
# بررسی اینکه آیا ارائه حاوی یک پروژه VBA است.
vba_project = presentation.getVbaProject()
if vba_project is not None:
for module in vba_project.getModules():
print(module.getName())
print(module.getSourceCode())
finally:
presentation.dispose()
بررسی اینکه آیا یک پروژه VBA دارای رمز عبور است یا نه
با استفاده از متد VbaProject.isPasswordProtected میتوانید تعیین کنید که آیا ویژگیهای یک پروژه با رمز عبور محافظت شدهاند یا خیر.
- یک نمونه از کلاس Presentation ایجاد کنید و ارائهای که حاوی ماکرو است را بارگذاری کنید.
- بررسی کنید آیا ارائه حاوی یک VBA project است یا نه.
- بررسی کنید آیا پروژه VBA با رمز عبور محافظت شده است تا ویژگیهای آن را مشاهده کنید.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("VBA.pptm")
try:
# بررسی اینکه آیا ارائه حاوی یک پروژه VBA است.
vba_project = presentation.getVbaProject()
if vba_project is not None:
if vba_project.isPasswordProtected():
print(f"The VBA project '{vba_project.getName()}' is password-protected for viewing its properties.")
finally:
presentation.dispose()
سؤالات متداول
چه اتفاقی برای ماکروها میافتد اگر ارائه را به صورت PPTX ذخیره کنم؟
ماکروها حذف میشوند زیرا PPTX از VBA پشتیبانی نمیکند. برای نگه داشتن ماکروها، PPTM، PPSM یا POTM را انتخاب کنید.
آیا Aspose.Slides میتواند ماکروها را داخل یک ارائه اجرا کند تا برای مثال دادهها را بهروزرسانی کند؟
خیر. این کتابخانه هرگز کد VBA را اجرا نمیکند؛ اجرای آن فقط در PowerPoint با تنظیمات امنیتی مناسب امکانپذیر است.
آیا کار با کنترلهای ActiveX که به کد VBA مرتبطاند پشتیبانی میشود؟
بله، میتوانید به ActiveX controls موجود دسترسی پیدا کنید، ویژگیهای آنها را تغییر دهید و آنها را حذف کنید. این برای مواردی که ماکروها با ActiveX تعامل دارند مفید است.