Python を使用したプレゼンテーションでの VBA プロジェクトの管理
はじめに
Aspose.Slides は、マクロおよび VBA コードを操作するためのクラスとインターフェイスを提供します。
Warning
マクロを含むプレゼンテーションを別のファイル形式 (PDF、HTML など) に変換すると、Aspose.Slides はすべてのマクロを無視します (マクロは結果のファイルに引き継がれません)。
プレゼンテーションにマクロを追加したり、マクロを含むプレゼンテーションを再保存したりすると、Aspose.Slides は単にマクロのバイト列を書き込むだけです。
Aspose.Slides はプレゼンテーション内のマクロを 決して 実行しません。
VBA マクロの追加
Aspose.Slides は、VBA プロジェクト (およびプロジェクト参照) を作成し、既存のモジュールを編集できるようにするために、VbaProject クラスを提供します。プレゼンテーションに埋め込まれた VBA を管理するには、VbaProject クラスを使用できます。
- [Presentation] クラスのインスタンスを作成します。
- [VbaProject] コンストラクタを使用して新しい VBA プロジェクトを追加します。
- VBA プロジェクトにモジュールを追加します。
- モジュールのソースコードを設定します。
stdoleへの参照を追加します。- Microsoft Office への参照を追加します。
- 参照を VBA プロジェクトに関連付けます。
- プレゼンテーションを保存します。
この Python コードは、プレゼンテーションに 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 マクロの削除
[Presentation] クラスの getVbaProject メソッドを使用すると、VBA マクロを削除できます。
- [Presentation] クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- マクロモジュールにアクセスしてそれを削除します。
- 変更済みのプレゼンテーションを保存します。
この Python コードは、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 プロジェクトに含まれるすべてのモジュールをループしてマクロを表示します。
この Python コードは、マクロを含むプレゼンテーションから 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()
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 内でのみ可能です。
VBA コードにリンクされた ActiveX コントロールの操作はサポートされていますか?
はい、既存の ActiveX controls にアクセスし、プロパティを変更したり削除したりできます。マクロが ActiveX と連携する際に便利です。