Чтение файла .doc без запуска MSWord

Я пытаюсь открыть файл .doc и прочитать его содержимое. Но я не могу найти способ, как это сделать без запуска MSWord.

Теперь у меня есть следующий код:

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
object nullObject = System.Reflection.Missing.Value;
object file = @"C:\doc.doc";
Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(ref file, ref nullObject, ref nullObject,
         ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
         ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
         ref nullObject);
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
string text = data.GetData(DataFormats.Text).ToString();
doc.Close(ref nullObject, ref nullObject, ref nullObject);
app.Quit(ref nullObject, ref nullObject, ref nullObject);

Но он запускает MSWord, есть ли решение сделать это без запуска?


person Vitali Fokin    schedule 20.09.2010    source источник
comment
neowin.net /форум/тема/   -  person Oskar Kjellin    schedule 21.09.2010
comment
любой, кто ищет решение.... stackoverflow.com/questions/9511116/   -  person amit patel    schedule 03.03.2012


Ответы (3)


Две возможности: либо использовать спецификацию Microsoft написать свой собственный синтаксический анализатор для формата .doc или использовать для этой цели существующую библиотеку (например, из Aspose). Если у вас нет пары свободных лет, которые вы могли бы потратить на эту задачу, последнее, безусловно, является правильным выбором.

person Jerry Coffin    schedule 20.09.2010
comment
спасибо, посмотрю Aspose lib. написание собственного парсера займет несколько лет :) - person Vitali Fokin; 21.09.2010
comment
вы можете использовать бесплатную .dll stackoverflow.com/questions/9511116/ - person amit patel; 03.03.2012

В прошлый раз, когда я делал это (через COM из C++), я вспоминаю свойство «Видимый» в интерфейсе приложения (true=visible).

Однако мне кажется, что значение по умолчанию было ложным, поэтому вам пришлось установить его в значение true, чтобы Word появился.

Независимо от того, может ли пользователь видеть Word, вы все равно увидите winword.exe (или как оно сегодня называется) в своем диспетчере задач. Я не думаю, что есть способ получить доступ к Word через этот интерфейс без запуска Word (за кулисами или нет).

Если вы вообще не хотите запускать Word, возможно, вам придется найти другое решение.

person Marc Bernier    schedule 20.09.2010
comment
видимость включена по умолчанию, поэтому я все равно вижу msword. даже я устанавливаю видимость на false, окно появляется и быстро схлопывается. - person Vitali Fokin; 21.09.2010
comment
мне нужно обработать много файлов документов, мне нужно слишком много времени, чтобы каждый раз запускать слово - person Vitali Fokin; 21.09.2010
comment
Странно насчет свойства видимости. Я использую более старую версию офиса (2003), возможно, они изменили настройки по умолчанию. COM очень медленный, вы можете повторно использовать некоторые объекты; объект приложения, я думаю, может оставаться в живых, когда вы циклически просматриваете каждый документ. Это может немного помочь. - person Marc Bernier; 29.09.2010

Добавьте пространство имен с помощью Добавить ссылку-->Обзор-->Code7248.word_reader.dll

Загрузите dll по указанному URL-адресу:

sourceforge.net/p/word-reader/wiki/Home

(Простая библиотека .NET, совместимая с .NET 2.0, 3.0, 3.5 и 4.0 для C#. В настоящее время она может извлекать только необработанный текст из файла .doc или .docx.)

Пример кода находится в простой консоли на С#:

using System;
using System.Collections.Generic;
using System.Text;
//add extra namespaces
using Code7248.word_reader;


namespace testWordRead
{
    class Program
    {
        private void readFileContent(string path)
        {
            TextExtractor extractor = new TextExtractor(path);
            string text = extractor.ExtractText();
            Console.WriteLine(text);
        }
        static void Main(string[] args)
        {
            Program cs = new Program();
            string path = "D:\Test\testdoc1.docx";
            cs.readFileContent(path);
            Console.ReadLine();
        }
    }
}

Он работает нормально.

person Kutty Rajesh Valangai    schedule 11.01.2016
comment
а что с лицензией у этого? и кто это разработал - person kiran kumar; 28.12.2017