C# 调用Word进行rtf到docx的转换

C# 调用Word进行rtf到docx的转换,c#,.net,ms-word,rtf,office-interop,C#,.net,Ms Word,Rtf,Office Interop,我需要定期以编程方式将*.rtf文件转换为*.docx。手动操作,使用“另存为内部Word 2007”时效果很好。。。生成的docx表现良好。从程序上讲,我无法让它工作 我尝试的基本内容如下: 。。。但方向相反。我没有打开*.docx并使用SaveAs到*.rtf,而是打开*.rtf并使用SaveAs到*.docx。但是,生成的文件将无法打开,因此显然有一些内容我不明白。是 wordApp.Documents.Open(@"D:\Bar\foo.rtf") 不是合法的事吗 如果您有任何关于如

我需要定期以编程方式将*.rtf文件转换为*.docx。手动操作,使用“另存为内部Word 2007”时效果很好。。。生成的docx表现良好。从程序上讲,我无法让它工作

我尝试的基本内容如下:

。。。但方向相反。我没有打开*.docx并使用SaveAs到*.rtf,而是打开*.rtf并使用SaveAs到*.docx。但是,生成的文件将无法打开,因此显然有一些内容我不明白。是

wordApp.Documents.Open(@"D:\Bar\foo.rtf")
不是合法的事吗


如果您有任何关于如何执行此操作的想法,我们将不胜感激。

能否显示您正在调用的代码
SaveAs
?我很好奇您指定的是哪个
Word.WdSaveFormat
。听起来好像是在保存rtf数据,但将扩展名改为.docx。

您可以试试这段代码,它适合我

var wordApp = new Microsoft.Office.Interop.Word.Application();
var currentDoc = wordApp.Documents.Open(@"C:\TestDocument.rtf");
currentDoc.SaveAs(@"C:\TestDocument.doc", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument97);
我在尝试使用wdFormatDocument或wdFormatDocumentDefault时遇到了相同的错误

编辑:这是对代码的更新,它会转换代码,但一旦出现错误,它就再也不会出现了

var wordApp = new Microsoft.Office.Interop.Word.Application();
var currentDoc = wordApp.Documents.Open(@"C:\TestDocument.rtf");
currentDoc.SaveAs(@"C:\TestDocument", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocumentDefault);
currentDoc.Close();
wordApp.Quit();

下面是进行转换的代码。代码与上面所示几乎相同,但有一些小的(但很重要的)区别-有必要使用引用(而不是对象本身):


程序本身运行时没有错误。如果我尝试打开结果文件,它只会产生“Word在尝试打开文件时遇到错误”。当我尝试用OpenXMLSDK2.0生产力工具查看它时,它报告“文件包含损坏的数据”。您能上传一个rtf示例吗?它给出了错误?我使用的是WdFormatDocument。。。但是好主意,我将使用其他一些工具,当我使用WdFormatDocumentDefault时,我可以成功地访问docx,而且WdFormatDocument97也可以成功地访问doc。。。谢谢你的主意。也许wdFormatDocument的语义与我预期的不同。我将Pr0fesso0rX标记为答案,因为这个完整的示例很可能对将来更多的人有用。。。但是谢谢你,马克,你的提示让我明白了,要让它工作,客户端计算机上必须安装MS Word吗?如果你从asp.net运行此代码,那么它应该安装在web服务器上;如果你从windows应用程序运行此代码,那么你的(客户端)计算机应该安装MS Word
Microsoft.Office.Interop.Word.Application _App = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document _Doc =  _App.Documents.Open("c:/xxx.rtf");

object _DocxFileName = "C:/xxx.docx";
Object FileFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatXMLDocument;

_Doc.SaveAs2(ref _DocxFileName, ref FileFormat);