Чтение .Doc файла с использованием DocumentFormat.OpenXml dll - PullRequest
11 голосов
/ 02 апреля 2012

Когда я пытаюсь прочитать файл .doc, используя dll-файл DocumentFormat.OpenXml, он выдает ошибку «Файл содержит поврежденные данные».

Эта 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 ]

14 голосов
/ 02 апреля 2012

Старые файлы .doc имеют совершенно другой формат, чем новые файлы .docx.Таким образом, нет, вы не можете использовать библиотеку OpenXml для чтения файлов .doc.

Для этого вам сначала потребуется либо вручную конвертировать файлы, либо использовать взаимодействие с Office вместоOpen XML SDK, который вы используете сейчас.

5 голосов
/ 04 июля 2012

Боюсь, не будет лучшего ответа, чем те, которые уже были даны. Формат Microsoft Word DOC является двоичным, тогда как форматы OpenXML, такие как DOCX, представляют собой сжатые файлы XML. Платформа OpenXml предназначена для работы только с последними.

Как и предполагалось, единственный другой вариант, который у вас есть, - это использовать Word Interop или стороннюю библиотеку для преобразования DOC -> DOCX, которую вы затем можете работать с библиотекой OpenXml.

3 голосов
/ 02 апреля 2012

.doc (если он создан с более старой версией Microsoft Word) не имеет такой же структуры, как .docx (который в основном представляет собой zip-файл с некоторыми документами XML).

Если ваш .doc «разархивирован» (просто переименуйте расширение .doc в .zip) для проверки, вам придется вручную преобразовать .doc в .docx.

0 голосов
/ 23 октября 2015

Вы можете использовать IFilterTextReader.

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

Вы можете взглянуть на http://www.codeproject.com/Articles/13391/Using-IFilter-in-C

...