Используя VBA, откройте документ формата OpenXML (.docx) в Word 2003, где расширение не является .docx или .docm - PullRequest
0 голосов
/ 26 января 2012

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

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

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

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

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

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

1 Ответ

0 голосов
/ 04 сентября 2012

Ответ заключается в том, что пакет обеспечения совместимости для 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;
}
...