مدیریت پروژه‌های VBA در ارائه‌ها با استفاده از PHP

مقدمه

API Aspose.Slides شامل کلاس‌هایی برای کار با ماکروها و کد VBA است.

افزودن ماکروهای VBA

Aspose.Slides کلاس VbaProject را فراهم می‌کند تا بتوانید پروژه‌های VBA (و ارجاعات پروژه) را ایجاد و ماژول‌های موجود را ویرایش کنید. می‌توانید از کلاس VbaProject برای مدیریت VBA جاسازی‌شده در یک ارائه استفاده کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. از سازندهٔ VbaProject برای افزودن یک پروژهٔ VBA جدید استفاده کنید.
  3. یک ماژول به VbaProject اضافه کنید.
  4. کد منبع ماژول را تنظیم کنید.
  5. ارجاعات به را اضافه کنید.
  6. ارجاعات به Microsoft Office را اضافه کنید.
  7. ارجاعات را با پروژهٔ VBA مرتبط کنید.
  8. ارائه را ذخیره کنید.
  # یک نمونه از کلاس ارائه ایجاد می‌کند
  $pres = new Presentation();
  try {
    # یک پروژه VBA جدید ایجاد می‌کند
    $pres->setVbaProject(new VbaProject());
    # یک ماژول خالی به پروژه VBA اضافه می‌کند
    $module = $pres->getVbaProject()->getModules()->addEmptyModule("Module");
    # کد منبع ماژول را تنظیم می‌کند
    $module->setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    # یک ارجاع به <stdole> ایجاد می‌کند
    $stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    # یک ارجاع به Office ایجاد می‌کند
    $officeReference = new VbaReferenceOleTypeLib("Office", "*\\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 اضافه می‌کند
    $pres->getVbaProject()->getReferences()->add($stdoleReference);
    $pres->getVbaProject()->getReferences()->add($officeReference);
    # ارائه را ذخیره می‌کند
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

حذف ماکروهای VBA

با استفاده از ویژگی VbaProject تحت کلاس Presentation می‌توانید یک ماکرو VBA را حذف کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید و ارائهٔ حاوی ماکرو را بارگذاری کنید.
  2. به ماژول Macro دسترسی پیدا کنید و آن را حذف کنید.
  3. ارائهٔ اصلاح‌شده را ذخیره کنید.
  # ارائه حاوی ماکرو را بارگذاری می‌کند
  $pres = new Presentation("VBA.pptm");
  try {
    # به ماژول Vba دسترسی پیدا می‌کند و آن را حذف می‌کند
    $pres->getVbaProject()->getModules()->remove($pres->getVbaProject()->getModules()->get_Item(0));
    # ارائه را ذخیره می‌کند
    $pres->save("test.pptm", SaveFormat::Pptm);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

استخراج ماکروهای VBA

  1. یک نمونه از کلاس Presentation ایجاد کنید و ارائهٔ حاوی ماکرو را بارگذاری کنید.
  2. بررسی کنید آیا ارائه شامل یک پروژهٔ VBA است یا خیر.
  3. در تمام ماژول‌های موجود در پروژهٔ VBA حلقه بزنید تا ماکروها را مشاهده کنید.
  # ارائه حاوی ماکرو را بارگذاری می‌کند
  $pres = new Presentation("VBA.pptm");
  try {
    # بررسی می‌کند که آیا ارائه شامل یک پروژه VBA است
    if (!java_is_null($pres->getVbaProject())) {
      foreach($pres->getVbaProject()->getModules() as $module) {
        echo($module->getName());
        echo($module->getSourceCode());
      }
    }
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

بررسی اینکه آیا یک پروژهٔ VBA با رمز عبور حفاظت شده است یا نه

با استفاده از متد VbaProject::isPasswordProtected می‌توانید تعیین کنید آیا ویژگی‌های یک پروژه با رمز عبور محافظت می‌شود یا نه.

  1. یک نمونه از کلاس Presentation ایجاد کنید و ارائه‌ای که شامل ماکرو است را بارگذاری کنید.
  2. بررسی کنید آیا ارائه شامل یک VBA project است یا نه.
  3. بررسی کنید آیا پروژهٔ VBA با رمز عبور حفاظت شده است تا ویژگی‌های آن را ببینید.
$presentation = new Presentation("VBA.pptm");
try {
    if ($presentation->getVbaProject() != null) { // بررسی می‌کند که آیا ارائه شامل یک پروژه VBA است.
        if ($presentation->getVbaProject()->isPasswordProtected()) {
            printf("The VBA Project '%s' is protected by password to view project properties.", 
                    $presentation->getVbaProject()->getName());
        }
    }
} finally {
    $presentation->dispose();
}

سوالات متداول

اگر ارائه را به صورت PPTX ذخیره کنم، چه اتفاقی برای ماکروها می‌افتد؟
ماکروها حذف می‌شوند زیرا PPTX از VBA پشتیبانی نمی‌کند. برای نگه داشتن ماکروها، PPTM، PPSM یا POTM را انتخاب کنید.

آیا Aspose.Slides می‌تواند ماکروها را داخل یک ارائه اجرا کند، برای مثال برای به‌روزرسانی داده‌ها؟
خیر. این کتابخانه هرگز کد VBA را اجرا نمی‌کند؛ اجرا فقط در داخل PowerPoint و با تنظیمات امنیتی مناسب ممکن است.

آیا کار با کنترل‌های ActiveX مرتبط با کد VBA پشتیبانی می‌شود؟
بله، می‌توانید به کنترل‌های ActiveX موجود دسترسی پیدا کنید، ویژگی‌های آن‌ها را تغییر دهید و حذف کنید. این هنگامی مفید است که ماکروها با ActiveX تعامل داشته باشند.