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
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.
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.
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:
Ich werde bei Zeiten mal die komplette Lösung online stellen, falls jemand ähnliche Probleme hat (oder zumindest einen Lösungsweg --> Hilfe zur Selbsthilfe).
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 😁
Danke der Anmerkung... kam leider zu spät... 😁 Viele Wege führen nach Rom...
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.