Frage

Ich versuche zu öffnen .doc-Datei und dessen Inhalt lesen. Aber ich kann keinen Weg finden, wie dies zu tun, ohne MSWord zu starten.

Jetzt habe ich folgenden Code:

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

Aber es startet MSWord, jede Lösung, es zu tun, ohne zu starten?

War es hilfreich?

Lösung

Zwei Möglichkeiten: entweder verwenden Microsofts spec Sie Ihren eigenen Parser für das .doc-Format oder verwenden Sie eine vorhandene Bibliothek zum Zweck (zB von Aspose ). Es sei denn, Sie ein paar Ersatz Jahren haben die Aufgabe zu verbringen, letztere ist eindeutig die richtige Wahl.

Andere Tipps

ich das letzte Mal tat dies (über COM von C ++), Ich erinnere mich an eine 'Visible' Eigenschaft in der Anwendungsschnittstelle (true = sichtbar).

Allerdings scheint es mir, dass der Standard falsch war, so dass Sie es auf true setzen mußten erscheinen Wort.

Unabhängig davon, ob der Benutzer Wort sehen, werden Sie noch sehen winword.exe (oder was auch immer es genannt wird heute) in der Task-Manager. Ich glaube nicht, dass es eine Möglichkeit, um Zugang Wort über diese Schnittstelle ohne es Word-Start (hinter den Kulissen oder nicht).

Wenn Sie nicht an allen Word starten möchten, können Sie eine andere Lösung finden müssen.

Fügen Sie den Namespace mit Verweis hinzufügen -> Browse -> Code7248.word_reader.dll

Download-DLL von der angegebenen URL:

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

(Eine einfache .NET-Bibliothek kompatibel mit .NET 2.0, 3.0, 3.5 und 4.0 für C #. Es kann zur Zeit nur den reinen Text aus einem .doc oder .docx-Datei extrahieren.)

Der Beispielcode ist in einfacher Konsole in 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();
        }
    }
}

Es funktioniert gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top