我首先使用 PowerPoint 2016 测试了这段代码(创建新文件并删除所有形状的简单代码)。它似乎工作得很好:
using namespace PowerPoint;
//Load currently running PowerPoint
_ApplicationPtr pptApp;
HRESULT hr = pptApp.GetActiveObject(__uuidof(PowerPoint::Application));
//Create new file with a new slide
_PresentationPtr presEdit = pptApp->Presentations->Add(msoTrue);
_SlidePtr slide = presEdit->Slides->Add(1, PpSlideLayout::ppLayoutText);
//Delete all shapes.
while (slide->Shapes->Count > 0)
{
//This line seems to give an error in 2007
PowerPoint::ShapePtr shp = slide->Shapes->Item(1);
shp->Delete();
}
但是当我在 Powerpoint 2007 上测试它时,发生了一些奇怪的事情。当我调用该Shapes->Item
方法时,它抛出了一个_com_error
错误代码为 0x80004005(未指定错误)的消息,Shapes (unknown member) : Failed.
我搜索了此错误消息但一无所获。我什至尝试使用 2007 版本的 typelib 文件,但也没有用。过了一会儿,我决定恢复使用该IDispatch::Invoke
方法(这很痛苦),并且不知何故奏效了。不知道为什么会这样,为什么我之前的尝试没有。
我正在使用#import
智能指针将 Microsoft Office 库导入我的代码。