使用DocumentFormat.OpenXml dll读取.Doc文件

时间:2012-04-02 10:47:33

标签: c# ms-word openxml openxml-sdk

当我尝试使用DocumentFormat.OpenXml dll读取.doc文件时,它的错误为“文件包含损坏的数据。”

这个dll正在正确读取.docx文件。

DocumentFormat.OpenXml dll可以帮助读取.doc文件吗?

string path = @"D:\Data\Test.doc";
string searchKeyWord = @"java";

private bool SearchWordIsMatched(string path, string searchKeyWord)
{
    try
    {
       using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(path, true))
       {
           var text = wordDoc.MainDocumentPart.Document.InnerText;
           if (text.Contains(searchKeyWord))
               return true;
           else
               return false;
       }
     }
     catch (Exception ex)
     {
         throw ex;
     }
}

4 个答案:

答案 0 :(得分:14)

旧的.doc文件与新的.docx文件格式完全不同。所以,不,你不能使用OpenXml库来读取.doc文件。

为此,您需要先手动转换文件,或者需要使用Office互操作,而不是现在使用的Open XML SDK。

答案 1 :(得分:5)

我担心没有比已经给出的答案更好的答案。 Microsoft Word DOC格式是二进制格式,而诸如DOCX的OpenXML格式是压缩XML文件。 OpenXml框架仅用于后者。

根据建议,您拥有的唯一其他选项是使用Word互操作或第三方库转换DOC - > DOCX,然后您可以使用OpenXml库。

答案 2 :(得分:3)

.doc(如果使用较早版本的Microsoft Word创建)与.docx(基本上是带有一些XML文档的zip文件)的结构不同。

如果您的.doc是'unzippable'(只需将.doc扩展程序重命名为.zip)以进行探测,则必须手动将.doc转换为{{ {1}}。

答案 3 :(得分:0)

您可以使用IFilterTextReader

TextReader reader = new FilterReader(path);
using (reader)
{
    txt = reader.ReadToEnd();
}

您可以查看http://www.codeproject.com/Articles/13391/Using-IFilter-in-C