Как узнать формат файла презентации в PowerPoint VSTO?

Я работал над некоторыми надстройками Office для Система Office 2007. Надстройки должны знать формат файла, поскольку они должны выполнять свои действия только в том случае, если этот формат является одним из более новых форматов на основе сжатого XML (docx, xlsx, xlsm, pptx и т. Д.).

Несмотря на различия в API (вызовы и поведение) для каждого продукта Office, мне удалось создать рабочие надстройки для Word и Excel. В обоих случаях я могу обнаружить событие сохранения и внести свои изменения в зависимости от формата файла и от того, является ли это сохранение или операция сохранения. Тем не менее, я пришел в PowerPoint и пытаюсь определить, в каком формате файл сохраняется или сохраняется, и является ли это обычным сохранением или операцией сохранения как.

Итак, мои вопросы в надстройке PowerPoint VSTO:

  • Есть ли способ определить формат файла (кроме простого сравнения расширений файлов)?
  • Можно ли определить, является ли сохранение обычным сохранением или сохранением как?

Обновить
Хорошо, я изменил свой поиск и нашел эти вопросы, которые, кажется, отвечают на мой первый вопрос (т. Е. Нет никакого другого способа, кроме как использовать расширение), но второй вопрос остается в силе (возможно, пока я не улучшу свое поисковое фу).

2 ответа

Насколько я помню с PPT, нет никакого способа сделать это. Вы должны перехватить событие OPEN, кэшировать имя файла для документа, а затем, во время сохранения, проверить имя файла. если это то же самое, то это было СОХРАНЕНИЕ, если отличается, это сохранение как.

Если документ НОВЫЙ, исходное имя файла не будет, поэтому при сохранении ДОЛЖНО быть сохранение как.

Application.PresentationBeforeSave это событие для подключения, которое сообщит вам, что это "Сохранить как...", поскольку оно происходит непосредственно перед появлением диалогового окна "Сохранить как". Application.PresentationSave это обычное сохранение (но может использоваться для "Сохранить как..." программно)

Так что я хотел бы сделать, это положить глобальную переменную что-то вроде Dim isSaveAs As Boolean = False в модуле, затем в Application.PresentationBeforeSave установите это True (если его аргумент Cancel = True - в этом случае я бы вернул его False). Тогда в Application.PresentationSave событие, которое я бы проверил If isSaveAs = True Then DoThis Else DoThat, Затем установите isSaveAs вернуться к False в конце Application.PresentationSave событие.

Другие вопросы по тегам