Сначала я протестировал этот код (простой код для создания нового файла и удаления всех фигур) с помощью 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 (Unspecified Error) с сообщением Shapes (unknown member) : Failed.
Я искал это сообщение об ошибке и ничего не получил. Я даже пытался использовать файл typelib версии 2007 года, и это тоже не сработало. Через некоторое время я решил просто вернуться к использованию IDispatch::Invoke
метод (который был боль) и это как-то сработало. Не уверен, почему это сработало и почему мои предыдущие попытки не сработали.
я использую #import
и умные указатели для импорта библиотеки Microsoft Office в мой код.
Задача ещё не решена.
Других решений пока нет …