PHP を使用したプレゼンテーションでの VBA プロジェクトの管理
Note
マクロを含むプレゼンテーションを別のファイル形式 (PDF、HTML など) に変換すると、Aspose.Slides はすべてのマクロを無視します(マクロは結果のファイルに引き継がれません)。
プレゼンテーションにマクロを追加したり、マクロを含むプレゼンテーションを再保存したりすると、Aspose.Slides は単にマクロのバイトを書き込みます。
Aspose.Slides はプレゼンテーション内のマクロを 決して 実行しません。
VBA マクロの追加
Aspose.Slides は、VBA プロジェクト(およびプロジェクト参照)の作成や既存モジュールの編集を可能にする VbaProject クラスを提供します。VbaProject クラスを使用して、プレゼンテーションに埋め込まれた VBA を管理できます。
- Presentation クラスのインスタンスを作成します。
- VbaProject コンストラクターを使用して新しい VBA プロジェクトを追加します。
- VbaProject にモジュールを追加します。
- モジュールのソースコードを設定します。
への参照を追加します。 - Microsoft Office への参照を追加します。
- 参照を VBA プロジェクトに関連付けます。
- プレゼンテーションを保存します。
この PHP コードは、プレゼンテーションに VBA マクロを最初から追加する方法を示しています。
# プレゼンテーション クラスのインスタンスを作成
$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 マクロの削除
Presentation クラスの下にある VbaProject プロパティを使用して、VBA マクロを削除できます。
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- マクロモジュールにアクセスして削除します。
- 変更されたプレゼンテーションを保存します。
この PHP コードは、VBA マクロを削除する方法を示しています。
# マクロを含むプレゼンテーションをロード
$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 マクロの抽出
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- プレゼンテーションに VBA プロジェクトが含まれているか確認します。
- VBA プロジェクトに含まれるすべてのモジュールをループして、マクロを表示します。
この PHP コードは、マクロを含むプレゼンテーションから 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 メソッドを使用して、プロジェクトのプロパティがパスワード保護されているかどうかを判断できます。
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- プレゼンテーションに VBA project が含まれているか確認します。
- 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();
}
FAQ
プレゼンテーションを PPTX 形式で保存した場合、マクロはどうなりますか?
PPTX は VBA をサポートしていないため、マクロは削除されます。マクロを保持したい場合は、PPTM、PPSM、または POTM を選択してください。
Aspose.Slides はプレゼンテーション内のマクロを実行して、たとえばデータを更新できますか?
いいえ。ライブラリは VBA コードを実行しません。実行は適切なセキュリティ設定がされた PowerPoint 内でのみ可能です。
VBA コードにリンクされた ActiveX コントロールの操作はサポートされていますか?
はい、既存の ActiveX controls にアクセスし、プロパティを変更したり削除したりできます。これはマクロが ActiveX と連携する場合に便利です。