Почему я получаю сообщение об ошибке недопустимого значения при использовании PpShapeFormat в Office 2013 Interop

Я написал утилиту MS JScript (для использования в TestComplete SmartBear), которая экспортирует изображения, встроенные в документ Word, в файлы PNG на диске. Когда я запускаю эту утилиту на Win7, с Office 2010 все работает нормально. Но когда я запускаю его на Win8 с Office 2013, я получаю ошибку «недопустимое значение» при передаче фильтра PpShapeFormat в метод экспорта.

Вот соответствующая часть моего сценария:

//get the list of shapes from the word doc, and how many there are
var iShapeList = DocObj.InlineShapes; //DocObj is created elsewhere
var iShapeTotal = iShapeList.count;

//create a powerpoint object and instantiate a presentation
var pptApp = Sys.OleObject("PowerPoint.Application"); //open PowerPoint
var pptDoc = pptApp.Presentations.Add(); //create a new blank document
var pptDocSlide = pptDoc.Slides.Add(1, 12); //12 = ppLayoutBlank
var pptShapeFmt = pptApp.PpShapeFormat; //format filter object

//loop through the Word document shapes, copy each one, paste it to the Ppt slide, 
//export the image out of the slide, and then delete it
for(var iShapeNo = 1; iShapeNo <= iShapeTotal; iShapeNo++)
{
   var iShape = iShapeList(iShapeNo); //get a shape
   iShape.ScaleHeight = hScale; //set the shape height and width
   iShape.ScaleWidth = wScale;

   iShape.Range.Copy();//copy the shape to the clipboard

   try 
   {
     with (pptDocSlide.Shapes.Paste(1)) //PpViewType 1 = Paste into Slide View
     {
        //Export the image pasted into the slide, to the extract path, then delete the slide.
         Export(ExtractPath + "\\" + IntToStr(iShapeNo) + ".png", pptShapeFmt); //2 = ppShapeFormatPNG            
         Delete();
         ++successTally; //one more in the WIN column!
     }
   }
   catch(exception)
   { 
      //does a bunch of cleanup
   }
}

Изучая PpShapeFormat, я нашел это Перечисление. Но у меня возникли проблемы с поиском какого-либо документа об изменениях между 2010 и 2013 годами, и нет хороших примеров того, как его правильно использовать.

Кто-нибудь знает, что здесь происходит?


person Greg Gauthier    schedule 24.07.2013    source источник
comment
Не могли бы вы также опубликовать код функции Export?   -  person Helen    schedule 25.07.2013
comment
@Helen — метод Export реализован в объекте Powerpoint Shape, который является частью библиотеки Microsoft Office Interop. Документацию по этому методу можно найти здесь: msdn.microsoft.com/en-us/library/   -  person Greg Gauthier    schedule 25.07.2013
comment
Теперь, когда я думаю об этом, мне интересно, в 2013 году они начали требовать оставшиеся аргументы. (ScaleWidth, ScaleHeight и ExportMode, все из которых я предположил, были необязательными, поскольку метод отлично работает в 2010 году).   -  person Greg Gauthier    schedule 25.07.2013
comment
Да, это не исправило. Во всяком случае, это сделало его хуже (масштабирование было испорчено). Итак, вернемся к чертежной доске.   -  person Greg Gauthier    schedule 25.07.2013
comment
Извините, я не заметил with и подумал, что Export это функция в другом месте кода.   -  person Helen    schedule 26.07.2013
comment
Похоже, что объект Shape в PowerPoint 2013 не использует метод Export: msdn.microsoft .com/en-us/library/ff746522.aspx   -  person Helen    schedule 26.07.2013
comment
Да, на самом деле, я нашел быстрое и грязное решение. Я собираюсь опубликовать это здесь как ответ на вопрос.   -  person Greg Gauthier    schedule 27.07.2013


Ответы (1)


Итак, как оказалось, документы Office 2013 (формат DOCX) на самом деле представляют собой просто сжатые каталоги. Это верно как для 2010, так и для 2013 года, на самом деле.

Все, что мне действительно нужно было сделать, это извлечь изображения из сжатого каталога.

person Greg Gauthier    schedule 26.07.2013