Utilisation de VBA, ouvrez un document de format openxml (.Docx) dans Word 2003, où l'extension n'est pas .Docx ou .docm

StackOverflow https://stackoverflow.com/questions/9014629

  •  14-11-2019
  •  | 
  •  

Question

J'ai un complément de mot qui écrit et lit des documents Word au format OpenXML - c'est-à-dire .docx.

Mais afin que je puisse reconnaître facilement "mes" documents comme contre le mot normal .docx fichiers que j'ai utilisée une autre extension, appelez-le .myx (ou .mym pour les documents compatibles macro).

Tout cela fonctionne merveilleusement dans Word 2007 et Word 2010, et je pensais que cela fonctionnerait dans Word 2003 (avec le pack de compatibilité installé).

mais Word 2003, alors qu'il ouvre des documents avec une extension .Docx, n'ouvre pas un document .myx, sauf si je le renommerai pour que l'extension soit .docx.

Lorsque je l'essaie de VBA, j'ai utilisé un certain nombre de valeurs évidentes pour l'énumération wdopenformat, mais rien ne semble aider.

Dois-je vraiment changer mon poste à .docx pour obtenir Word 2003 pour l'ouvrir?

Était-ce utile?

La solution

La réponse est que le pack de compatibilité pour Office 2007 est juste un autre "convertisseur de texte" à Word, et les extensions .docx et .docm semblent être ce que Word utilise pour appeler ce convertisseur de texte.

Cependant, cet article Cet article , qui traite de sauvegarde en tant que .docx dans le Word 2003 Environnement, donne un indice quant à la manière d'ouvrir les documents.En utilisant la macro définie dans ce lien comme guide, voici l'essence (en C #) de la manière dont vous allez trouver la valeur «OpenFormat» correcte pour ouverture Document:

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;
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top