Domanda

Sto cercando di file doc aprire e leggere il suo contenuto. Ma non riesco a trovare alcun modo per fare questo senza lanciare MSWord.

Ora ho seguente codice:

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

Ma lancia MSWord, qualsiasi soluzione di farlo senza lanciare?

È stato utile?

Soluzione

Due possibilità: o utilizzare spec di Microsoft di scrivere il proprio parser per il formato .doc, o utilizzare una libreria esistente per lo scopo (ad esempio, da Aspose ). A meno che non si dispone di un paio di anni di ricambio da spendere per il compito, quest'ultimo è chiaramente la scelta corretta.

Altri suggerimenti

L'ultima volta che ho fatto questo (via COM da C ++), ricordo di una proprietà 'Visible' nell'interfaccia dell'applicazione (true = visibile).

Tuttavia, mi sembra che il difetto era falso, così si doveva impostare a true per far apparire Word.

A prescindere dal fatto che l'utente può vedere Word, si continua a vedere winword.exe (o come si chiama oggi) nel task manager. Non credo ci sia un modo per accedere Word tramite questa interfaccia senza lanciare Word (dietro le quinte e non).

Se non si desidera che Word lancio a tutti, potrebbe essere necessario trovare un'altra soluzione.

Aggiungere lo spazio dei nomi usando Aggiungi riferimento -> Sfoglia -> Code7248.word_reader.dll

Scarica DLL dalla data URL:

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

(Una semplice NET compatibile con .NET 2.0, 3.0, 3.5 e 4.0 per C #. Attualmente può estrarre solo il testo grezzo da un file doc o .docx).

L'esempio di codice è in semplice console 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();
        }
    }
}

Si sta funzionando benissimo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top