Laden...

Word-Dokument (.docx) wird fehlerhaft ausgelesen

Erstellt von TobyJ85 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.981 Views
T
TobyJ85 Themenstarter:in
17 Beiträge seit 2011
vor 12 Jahren
Word-Dokument (.docx) wird fehlerhaft ausgelesen

Hallo zusammen,

ich habe eine Methode geschrieben, mit dem Ziel, den Inhalt eines Word-Dokuments im Format .docx einzulesen und den Inhalt zeilenweise in eine generische Liste zu speichert.. Die Methode sieht so aus:


public void read_document(string file_path)
{
    string line = String.Empty;
    StreamReader sr = null;

    if (File.Exists(file_path))
    {
        try
        {
            sr = new StreamReader(file_path, Encoding.UTF7);
            while ((line = sr.ReadLine()) != null)
            {
				this.document_content_lines.Add(line);
            }
        }
        catch (Exception e)
        {
			System.Console.WriteLine(e.Message);
        }
        sr.Close();
    }
	else
    {
        System.Console.WriteLine("File not found.");
    }
}

Zunächts einmal das was die Methode liefern soll:
Meine Testanwendung (zum Testen der .dll) sollte, weil das Testdokument 11 Zeilen hat, in der erste Zeile der Konsole 11 anzeigen, gefolgt von 11 Zeilen mit dem Inhalt.

Hier nun die Ausgabe, die nicht nach dem aussieht, was rauskommen soll (siehe Anhang).

Was genau stimmt an meinem Code nicht, kann es sein, dass der nur den XML-Teil des Worddocuments ausließt?

Eine Frage dazu noch: Kann man vorher für jede Zeile das Format der Schrift (bspw. ob kursiv oder nicht, welche Schriftgröße etc.) abfragen? Das würde mir das Füllen der generische Liste erleichtern!

Danke im Voraus.

Gruß
TobyJ85

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

warum hat die Datei wohl die Endung docx und nicht txt? Richtig, es ist keine Textdatei, deshalb funktioniert das so wie du es vorhast natürlich vorne und hinten nicht. Docx ist ein gezippter Container der die Nutzdaten enthält und diese sind auch keine Textdateien sondern XML. Siehe dazu Office Open XML

Baka wa shinanakya naoranai.

Mein XING Profil.

T
TobyJ85 Themenstarter:in
17 Beiträge seit 2011
vor 12 Jahren
Word-Dokument (.docx) wird fehlerhaft ausgelesen

Hallo,

das mit der docx-Endung, dem XML und der eigentlichen TXT-Datei habe ich mir auch schon überlegt.

Dr. Google liefert dazu auch folgendes:
http://www.codeproject.com/KB/office/ExtractTextFromDOCXs.aspx

Ich muss mal gucken, wie ich genau eine Lösung finde. Danke erstmal für die Antwort.

T
TobyJ85 Themenstarter:in
17 Beiträge seit 2011
vor 12 Jahren

Hallo,

ich habe jetzt mal den Code aus dem Link meines letzten Beitrags so modifiziert, dass meine Methode von ersten Beitrag irgendwann in der Lage sein sollte, auch .docx Formate lesen zu können.

Sicherlich könnte ich auch einfach aus .docx TXT-Dateien bauen, aber:

  1. Von den .docx-Dateien muss ich aktuell > 100 verschiedene einlesen (Tendenz steigend), warum die alle in TXT umwandeln ??? Die Frage ist auch, ob sowas auf Dauer sinnvoll ist
  2. Der Computer ist ein Rechnenknecht. Alles was der PC machen kann, soll er auch tun, ich will ja bei der späteren Anwendung sowenig machen, wie möglich!

Ich werde bei Zeiten mal die komplette Lösung online stellen, falls jemand ähnliche Probleme hat (oder zumindest einen Lösungsweg --> Hilfe zur Selbsthilfe).

S
167 Beiträge seit 2008
vor 12 Jahren

alternativ könnte man auch den Link von talla verfolgen, sehen dass es ein Open XML SDK gibt mit dem man mittelmäßig komfortabel solche Dateien bearbeiten kann 😁

T
TobyJ85 Themenstarter:in
17 Beiträge seit 2011
vor 12 Jahren

Danke der Anmerkung... kam leider zu spät... 😁 Viele Wege führen nach Rom...

T
TobyJ85 Themenstarter:in
17 Beiträge seit 2011
vor 12 Jahren

Hallo zusammen,

ich habe nun nach einiger Umstellungsarbeit, die Lösung meines Problems auf das Open XML SDK 2.0 umgestellt. Funktioniert wirklich sehr gut und ist auch einfach anzuwenden.

In 95% der Fälle funktioniert das Auslesen auch so, wie es soll. Hier mal der Code (Auszug):


 using (WordprocessingDocument wdoc = WordprocessingDocument.Open(this.fileName, false))
{
     MainDocumentPart mainPart = wdoc.MainDocumentPart;
     Document doc = mainPart.Document;
     //...

     foreach (Paragraph paragraph in doc.Descendants<Paragraph>())
     {
          foreach (Text t in paragraph.Descendants<Text>())
          {
               //...
          }
     }
//..
}

Nun ergibt sich ein Problem, welches ich bisher (Dr. Google, Webcasts etc.) nicht lösen konnte:
In den restlichen 5% ist es notwendig - damit die Daten richtig eingelesen werden - die Schriftgröße des jeweilen Textstückes abzufragen. Textstücke werden hier in der zweiten for-schleife mit t.Text() abgerufen und dann paragraphenweise zusammengesetzt.
Hat jemand eine Idee, wie ich dem Textstück entnehmen kann, welche Schriftgröße dieses Textstück hat. Die Unterteilung in Textstücke ist notwendig, weil in einem Paragraph mehrere Schriftgrößen verwendet werden.