Ich habe ein ziemlich ungewöhnliches Problem. Ich habe eine MS Word-Datei (erstellt von Adobe Acrobat, Original war ein PDF), die mehrere Textfelder enthält. Der Inhalt dieser Textfelder muss analysiert werden, damit ich ihn in eine Datenbank importieren kann. Der Text im PDF-Dokument ist in zwei Spalten formatiert. Leider wird bei der Dateikonvertierung in Adobe Acrobat nicht nach jeder Zeile ein Zeilenumbruch eingefügt. Wenn das DOCX als eine Textdatei gespeichert wird, wird der Text daher durcheinander gebracht. Die Dateikonvertierung in Word, die Option "Zeilenenden hinzufügen", funktioniert nicht für Textfelder oder Textrahmen. Durch das Transformieren aller Textfelder in Absatztext wird auch der Text durcheinander gebracht. Meiner Meinung nach ist dies der beste Weg, um ein VBA-Makro zu lösen, das jedes automatische Zeilenende in einem beliebigen Textfeld im Dokument erkennt und einen Zeilenumbruch einfügt. Wie auch immer, ich' Wir haben versucht, dies mit dem vordefinierten Lesezeichen "\ line" zu tun, aber dies scheint auch in Textfeldern nicht zu funktionieren. Ich erhalte immer wieder die Fehlermeldung "Das Objekt wurde entfernt", die nicht auftritt, wenn nur Absatztext ausgewählt ist (nicht in einem Textfeld).
Sub ChangeAutoLineBreaks()
Dim r As Word.Range
Set r = Selection.Range
Selection.Collapse direction:=wdCollapseStart
Do Until Selection.End > r.End
Selection.Bookmarks("\Line").Select
If Right(Selection, 1) = " " Then
Selection.SetRange Selection.End - 1, Selection.End
Selection.Delete
Selection.Text = vbCr
Selection.Bookmarks("\Line").Select
Selection.Collapse direction:=wdCollapseStart
End If
Selection.MoveDown wdLine, 1, False
Loop
' reselect our original selection
r.Select
Set r = Nothing
End Sub
Ich habe andere Dateimigrationstools (pdf> docx oder pdf> txt) ausprobiert, aber ich habe das beste Ergebnis erzielt, wenn die Dateikonvertierung mit MS Word als Bypass durchgeführt wird.
Hat jemand irgendwelche Tipps, wie ich das in Word zum Laufen bringen kann?
Screenshot, der das Problem beschreibt
Vielen Dank!
Peter
quelle
Antworten:
Word hat kein Objekt zum Markieren von Zeilenenden innerhalb von Absätzen, daher ist es eine schwierige Aufgabe.
Als Workaround können Sie:
Das folgende Codebeispiel führt diesen Vorgang für einen Absatz aus. Sie müssen nur alle Absätze in Ihren Textfeldern durchlaufen (ich habe getestet, es funktioniert auch mit Textfeldern).
quelle
Thx Máté, es hat nicht die Lösung gebracht, sondern mir in die richtige Richtung geholfen. Tatsächlich und weil es schwierig ist, war es eine einfache Analyse des Verhaltens der Auswahlen, als die Aufgabe manuell ausgeführt wurde. Ihre Lösung ging davon aus, dass es nur ein automatisches Zeilenende innerhalb eines Absatzes gab, es jedoch Absätze mit mehr als zwei Zeilen gab. So habe ich es gelöst.
quelle