จัดการโครงการ VBA ในงานนำเสนอด้วย Python

Introduction

Aspose.Slides มีคลาสและอินเทอร์เฟซสำหรับทำงานกับแมโครและโค้ด VBA.

Add VBA Macros

Aspose.Slides มีคลาส VbaProject เพื่อให้คุณสร้างโครงการ VBA (และอ้างอิงโครงการ) และแก้ไขโมดูลที่มีอยู่ คุณสามารถใช้คลาส VbaProject เพื่อจัดการ VBA ที่ฝังอยู่ในงานนำเสนอ.

  1. สร้างอินสแตนซ์ของคลาส Presentation.
  2. ใช้คอนสตรัคเตอร์ของ VbaProject เพื่อเพิ่มโครงการ VBA ใหม่.
  3. เพิ่มโมดูลเข้าไปในโครงการ VBA.
  4. ตั้งค่าโค้ดต้นฉบับของโมดูล.
  5. เพิ่มการอ้างอิงไปยัง stdole.
  6. เพิ่มการอ้างอิงไปยัง Microsoft Office.
  7. เชื่อมโยงการอ้างอิงกับโครงการ VBA.
  8. บันทึกงานนำเสนอ.
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()

Remove VBA Macros

โดยใช้เมธอด getVbaProject ของคลาส Presentation คุณสามารถลบแมโคร VBA ได้.

  1. สร้างอินสแตนซ์ของคลาส Presentation และโหลดงานนำเสนอที่มีแมโคร.
  2. เข้าถึงโมดูลแมโครและลบออก.
  3. บันทึกงานนำเสนอที่แก้ไขแล้ว.
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()

Extract VBA Macros

  1. สร้างอินสแตนซ์ของคลาส Presentation และโหลดงานนำเสนอที่มีแมโคร.
  2. ตรวจสอบว่ากาตนำเสนอมีโครงการ VBA หรือไม่.
  3. วนลูปผ่านโมดูลทั้งหมดในโครงการ 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:
        for module in vba_project.getModules():
            print(module.getName())
            print(module.getSourceCode())
finally:
    presentation.dispose()

Check Whether a VBA Project Is Password-Protected

โดยใช้เมธอด VbaProject.isPasswordProtected คุณสามารถตรวจสอบได้ว่าโครงการมีการปกป้องด้วยรหัสผ่านหรือไม่.

  1. สร้างอินสแตนซ์ของคลาส Presentation และโหลดงานนำเสนอที่มีแมโคร.
  2. ตรวจสอบว่ากาตนำเสนอมี VBA project หรือไม่.
  3. ตรวจสอบว่าโครงการ 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()

FAQ

What happens to macros if I save the presentation as PPTX?

แมโครจะถูกลบออกเนื่องจาก PPTX ไม่รองรับ VBA หากต้องการเก็บแมโคร ให้เลือกใช้ PPTM, PPSM หรือ POTM.

Can Aspose.Slides run macros inside a presentation to, for example, refresh data?

ไม่ได้ ไลบรารีไม่เคยรันโค้ด VBA การดำเนินการสามารถทำได้เฉพาะใน PowerPoint ที่มีการตั้งค่าความปลอดภัยที่เหมาะสมเท่านั้น.

Is working with ActiveX controls linked to VBA code supported?

ใช่ คุณสามารถเข้าถึง ActiveX controls ที่มีอยู่, แก้ไขคุณสมบัติของมัน, และลบออกได้ ซึ่งเป็นประโยชน์เมื่อแมโครโต้ตอบกับ ActiveX.