2014-04-23 237 views
2

我想根据Word安装版本保存Word文档;保存Word文档

如果是Word 2003(适当的版本号是11),则使用DOC扩展名。
如果Word版本高于2003,则使用DOCX扩展名。

的差异反映在发送给SaveAS方法的第二个参数:

object fileFormat = GraphDocsSettings.Default.WordInstalledVersion > 11.0?  
       WdSaveFormat.wdFormatXMLDocument : WdSaveFormat.wdFormatDocument; 

wordDoc.SaveAs(ref outputFile, fileFormat, ref missing, ref missing, ref missing, 
          ref missing, ref missing, ref missing, ref missing, 
          ref missing, ref missing, ref missing, ref missing, 
          ref missing, ref missing, ref missing); 

然而,当使用Interop.Word 11.0我得到以下错误:

Microsoft.Office.Interop.Word.WDSaveFormat does not contain a definition for wdFormatXMLDocument. 

任何想法?

+0

对此接受答案的看了这么张贴http://stackoverflow.com/questions/3266675/how-to-detect-installed-version-of-ms-office –

+0

@PaulZahra,谢谢,我已经知道了什么是安装的版本。 – user3165438

回答

1

不确定不同字版本之间的API是否完全相同。

如果我可以提出建议 - 使用NetOffice(see link)而不是Office Interop程序集。

该API与Office Interop API相同,并且可以与所有(当前)版本的Microsoft Office一起使用。

NB - 这里有一个例子:http://netoffice.codeplex.com/wikipage?title=Word_Example01

您应导入下面的命名空间来得到它的工作:

using NetOffice; 
using Word = NetOffice.WordApi; 
using NetOffice.WordApi.Enums; 
using Office = NetOffice.OfficeApi; 
+0

似乎是一个很好的建议。 NetOffice和Office Interop PIA有什么区别? – user3165438

+0

NetOffice是Office Com Interface的一个包装,虽然它使用LateBinding /反射,因此可以使用任何Office版本。请参阅文档以获取更多信息 –

+0

我是否像附带Office PIA一样附加了dll? – user3165438

0

这是因为您使用了interop程序集的错误版本。您不能引用仅存在于框架的更高版本中的值。

您应该使用更高版本的互操作版本,或者创建两个单独的项目,一个用于旧版本的互操作程序集,一个用于更高版本。

+0

我可以在2003年使用更高的互操作性吗? – user3165438

+0

@ user3165438:我不这么认为。我认为框架版本是不同的向下兼容。向上工作。 –