Leitura.Ficheiro Doc com DocumentFormat.Dll do OpenXml

Quando estou a tentar ler .ficheiro doc com DocumentFormat.OpenXml dll seu erro de dar como " arquivo contém dados corrompidos."

Este dll está a ler .ficheiro docx como deve ser.

Pode Documentar.OpenXml dll ajuda na leitura .doc file?

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;
     }
}
Author: Hakam Fostok, 2012-04-02

4 answers

O velho .os arquivos doc têm um formato completamente diferente do novo .ficheiros docx. Então, não, você não pode usar a biblioteca OpenXml para ler .ficheiros médicos.

Para fazer isso, você teria que converter manualmente os arquivos primeiro, ou teria que usar o Office interop, em vez do Open XML SDK que você está usando agora.

 14
Author: svick, 2012-04-02 10:57:17
Receio que não haja resposta melhor do que a já dada. O formato Microsoft Word DOC é binário, enquanto formatos OpenXML como o DOCX são arquivos XML com zip. O framework OpenXml é para trabalhar apenas com o último.

Como sugerido, a única outra opção que você tem é usar o Word interop ou biblioteca de terceiros para converter DOC -> DOCX que você pode então trabalhar com a biblioteca OpenXml.

 5
Author: Adam, 2012-07-04 10:19:14

.doc (se Criado com uma versão mais antiga de Microsoft Word) não tem a mesma estrutura que um .docx (que é basicamente um ficheiro zip com alguns documentos XML).

Se o seu .doc for ' inzippable '(basta mudar o nome da extensão .doc para .zip) para sonda, terá de converter manualmente o .doc para um .docx.

 2
Author: Alex, 2012-04-02 10:52:28

Pode usar IFilterTextReader.

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

Podes dar uma vista de olhos http://www.codeproject.com/Articles/13391/Using-IFilter-in-C

 0
Author: Indaiá Melo, 2015-10-22 22:56:39