Чтение .doc файла без запуска MSWord - PullRequest
4 голосов
/ 21 сентября 2010

Я пытаюсь открыть файл .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, какое-нибудь решение сделать это без запуска?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

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

1 голос
/ 11 января 2016

Добавьте пространство имен, используя Добавить ссылку -> Обзор -> 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файл.)

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

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();
        }
    }
}

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

1 голос
/ 21 сентября 2010

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

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

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

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

...