使用 JavaScript 管理簡報中的 VBA 專案
Contents
[
Hide
]
介紹
Aspose.Slides 提供用於處理巨集和 VBA 程式碼的類別。
注意
當您將包含巨集的簡報轉換為其他檔案格式 (PDF、HTML 等) 時,Aspose.Slides 會忽略所有巨集(巨集不會被帶入產生的檔案)。
當您向簡報新增巨集或重新儲存包含巨集的簡報時,Aspose.Slides 只會寫入巨集的位元組。
Aspose.Slides 永不 執行簡報中的巨集。
新增 VBA 巨集
Aspose.Slides 提供 [VbaProject] 類別,讓您建立 VBA 專案(以及專案參照)並編輯既有模組。您可以使用 [VbaProject] 類別來管理嵌入於簡報中的 VBA。
- 建立 [Presentation] 類別的實例。
- 使用 [VbaProject] 建構函式新增一個 VBA 專案。
- 將模組新增至 VbaProject。
- 設定模組的來源程式碼。
- 新增對
的參照。 - 新增對 Microsoft Office 的參照。
- 將參照關聯至 VBA 專案。
- 儲存簡報。
以下 JavaScript 程式碼示範如何從頭為簡報新增 VBA 巨集:
// 建立簡報類別的實例
let pres = new aspose.slides.Presentation();
try {
// 建立新的 VBA 專案
pres.setVbaProject(new aspose.slides.VbaProject());
// 向 VBA 專案新增空白模組
let module = pres.getVbaProject().getModules().addEmptyModule("Module");
// 設定模組來源程式碼
module.setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
// 建立對 <stdole> 的參照
let stdoleReference = new aspose.slides.VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// 建立對 Office 的參照
let officeReference = new aspose.slides.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", aspose.slides.SaveFormat.Pptm);
} finally {
if (pres != null) {
pres.dispose();
}
}
您可能想看看 Aspose Macro Remover,這是一個免費的 Web 應用程式,可用於從 PowerPoint、Excel 和 Word 文件中移除巨集。
移除 VBA 巨集
使用 [Presentation] 類別下的 [VbaProject] 屬性,即可移除 VBA 巨集。
- 建立 [Presentation] 類別的實例,並載入包含巨集的簡報。
- 存取 Macro 模組並將其移除。
- 儲存已修改的簡報。
以下 JavaScript 程式碼示範如何移除 VBA 巨集:
// 載入包含巨集的簡報
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
// 存取 Vba 模組並將其移除
pres.getVbaProject().getModules().remove(pres.getVbaProject().getModules().get_Item(0));
// 儲存簡報
pres.save("test.pptm", aspose.slides.SaveFormat.Pptm);
} finally {
if (pres != null) {
pres.dispose();
}
}
擷取 VBA 巨集
- 建立 [Presentation] 類別的實例,並載入包含巨集的簡報。
- 檢查簡報是否包含 VBA 專案。
- 遍歷 VBA 專案中所有模組,以檢視巨集。
以下 JavaScript 程式碼示範如何從包含巨集的簡報中擷取 VBA 巨集:
// 載入包含巨集的簡報
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
// 檢查簡報是否包含 VBA 專案
if (pres.getVbaProject() != null) {
for (let i = 0; i < pres.getVbaProject().getModules().size(); i++) {
let module = pres.getVbaProject().getModules().get_Item(i);
console.log(module.getName());
console.log(module.getSourceCode());
}
}
} finally {
if (pres != null) {
pres.dispose();
}
}
檢查 VBA 專案是否受密碼保護
使用 [VbaProject.isPasswordProtected] 方法,您可以判斷專案的屬性是否受密碼保護。
- 建立 [Presentation] 類別的實例,並載入包含巨集的簡報。
- 檢查該簡報是否包含 [VBA project]。
- 檢查 VBA 專案是否受密碼保護,以查看其屬性。
let presentation = new aspose.slides.Presentation("VBA.pptm");
try {
if (presentation.getVbaProject() != null) { // 檢查簡報是否包含 VBA 專案。
if (presentation.getVbaProject().isPasswordProtected()) {
console.log("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 中,且具備相應安全設定時才可執行。
是否支援與連結至 VBA 程式碼的 ActiveX 控制項互動?
可以,您可以存取現有的 ActiveX controls,修改其屬性,並將其移除。當巨集與 ActiveX 互動時,此功能很有用。