Gestire progetti VBA nelle presentazioni usando PHP
Introduzione
L’API Aspose.Slides contiene classi per lavorare con macro e codice VBA.
Note
Quando converti una presentazione contenente macro in un formato di file diverso (PDF, HTML, ecc.), Aspose.Slides ignora tutte le macro (le macro non vengono trasferite nel file risultante).
Quando aggiungi macro a una presentazione o risalvi una presentazione contenente macro, Aspose.Slides scrive semplicemente i byte delle macro.
Aspose.Slides non esegue mai le macro in una presentazione.
Aggiungere macro VBA
Aspose.Slides fornisce la classe VbaProject per consentire la creazione di progetti VBA (e riferimenti di progetto) e la modifica dei moduli esistenti. Puoi usare la classe VbaProject per gestire il VBA incorporato in una presentazione.
- Crea un’istanza della classe Presentation.
- Usa il costruttore VbaProject per aggiungere un nuovo progetto VBA.
- Aggiungi un modulo al VbaProject.
- Imposta il codice sorgente del modulo.
- Aggiungi riferimenti a
. - Aggiungi riferimenti a Microsoft Office.
- Associa i riferimenti al progetto VBA.
- Salva la presentazione.
Questo codice PHP mostra come aggiungere una macro VBA da zero a una presentazione:
# Crea un'istanza della classe Presentation
$pres = new Presentation();
try {
# Crea un nuovo progetto VBA
$pres->setVbaProject(new VbaProject());
# Aggiunge un modulo vuoto al progetto VBA
$module = $pres->getVbaProject()->getModules()->addEmptyModule("Module");
# Imposta il codice sorgente del modulo
$module->setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
# Crea un riferimento a <stdole>
$stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
# Crea un riferimento a 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");
# Aggiunge riferimenti al progetto VBA
$pres->getVbaProject()->getReferences()->add($stdoleReference);
$pres->getVbaProject()->getReferences()->add($officeReference);
# Salva la presentazione
$pres->save("test.pptm", SaveFormat::Pptm);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Rimuovere macro VBA
Utilizzando la proprietà VbaProject della classe Presentation, è possibile rimuovere una macro VBA.
- Crea un’istanza della classe Presentation e carica la presentazione contenente la macro.
- Accedi al modulo Macro e rimuovilo.
- Salva la presentazione modificata.
Questo codice PHP mostra come rimuovere una macro VBA:
# Carica la presentazione contenente la macro
$pres = new Presentation("VBA.pptm");
try {
# Accede al modulo Vba e lo rimuove
$pres->getVbaProject()->getModules()->remove($pres->getVbaProject()->getModules()->get_Item(0));
# Salva la presentazione
$pres->save("test.pptm", SaveFormat::Pptm);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Estrarre macro VBA
- Crea un’istanza della classe Presentation e carica la presentazione contenente la macro.
- Verifica se la presentazione contiene un progetto VBA.
- Scorri tutti i moduli contenuti nel progetto VBA per visualizzare le macro.
Questo codice PHP mostra come estrarre macro VBA da una presentazione contenente macro:
# Carica la presentazione contenente la macro
$pres = new Presentation("VBA.pptm");
try {
# Verifica se la presentazione contiene un progetto 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();
}
}
Verificare se un progetto VBA è protetto da password
Utilizzando il metodo VbaProject::isPasswordProtected, è possibile determinare se le proprietà di un progetto sono protette da password.
- Crea un’istanza della classe Presentation e carica una presentazione che contiene una macro.
- Verifica se la presentazione contiene un VBA project.
- Controlla se il progetto VBA è protetto da password per visualizzarne le proprietà.
$presentation = new Presentation("VBA.pptm");
try {
if ($presentation->getVbaProject() != null) { // Verifica se la presentazione contiene un progetto 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
Cosa succede alle macro se salvo la presentazione come PPTX?
Le macro verranno rimosse perché PPTX non supporta VBA. Per mantenere le macro, scegli PPTM, PPSM o POTM.
Aspose.Slides può eseguire macro all’interno di una presentazione per, ad esempio, aggiornare i dati?
No. La libreria non esegue mai codice VBA; l’esecuzione è possibile solo in PowerPoint con le impostazioni di sicurezza appropriate.
È supportato l’uso di controlli ActiveX collegati a codice VBA?
Sì, è possibile accedere ai ActiveX controls, modificare le loro proprietà e rimuoverli. Questo è utile quando le macro interagiscono con ActiveX.