Используя VBA, откройте документ формата OpenXML (.docx) в Word 2003 с расширением, отличным от .docx или .docm.

У меня есть надстройка Word, которая записывает и читает документы Word в формате OpenXML, то есть .docx.

Но чтобы я мог легко распознавать «мои» документы по сравнению с обычными файлами Word .docx, я использовал другое расширение, назовем его .myx (или .mym для документов с поддержкой макросов).

Все это прекрасно работает в Word 2007 и Word 2010, и я думал, что это будет работать в Word 2003 (с установленным пакетом совместимости).

Но Word 2003, хотя он открывает документы с расширением .docx, не откроет документ .myx, если я не переименую его так, чтобы расширение было .docx.

Когда я пробовал это с VBA, я использовал ряд очевидных значений для перечисления WdOpenFormat, но, похоже, ничего не помогает.

Мне действительно нужно менять расширение на .docx, чтобы Word 2003 открывал его?


person Peter    schedule 26.01.2012    source источник


Ответы (1)


Ответ заключается в том, что пакет обеспечения совместимости для Office 2007 - это просто еще один «конвертер текста» в Word, а расширения .docx и .docm, по-видимому, являются тем, что Word использует для вызова этого текстового конвертера.

Однако эта статья эта статья, посвященная с сохранением как .docx в среде Word 2003 дает подсказку, как открывать документы. Используя макрос, определенный в этой ссылке, в качестве руководства, вот суть (на C #) того, как вы пытаетесь найти правильное значение OpenFormat для открытия документа:

using MSWord = Microsoft.Office.Interop.Word;
...
private object GetOpenFormat(bool macroEnabled) {
  object result = MSWord.WdOpenFormat.wdOpenFormatAuto; /* default in case can't find the real value */
  string formatName = (macroEnabled? "Word 2007 Macro-enabled Document": "Word 2007 Document");
  foreach(MSWord.FileConverter converter in _msWordInstance.FileConverters) {
    if(string.Compare(converter.FormatName, formatName, true) == 0) {
      if(converter.CanOpen) {
        result = converter.OpenFormat;
        break;
      }
    }
  }
  return result;
}
person Peter    schedule 04.09.2012