Word: Ersetzen Sie automatische Zeilenumbrüche durch Zeilenumbrüche


0

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

Link zum docx-Dokument

Vielen Dank!

Peter


können Sie einige Screenshots
einschließen

Außerdem habe ich eine gute Möglichkeit gefunden, Ihre Frage zu stellen, indem Sie einige kurze Beispieldateien erstellen, die das Problem veranschaulichen. Dann kann jeder, der versucht zu beantworten, versuchen, das Problem für diese Dateien zu lösen. Also, das mit Screenshots und klarer Darstellung, was Sie wollen und was Sie bekommen. Ihre Frage sieht nicht schlecht aus, aber das würde zu einer besseren Frage und einer wahrscheinlicheren Antwort führen.
Barlop

Screenshots hinzugefügt! Vielen Dank!
Kunst

Die meisten Leute kennen diese ungewöhnliche Option, die Sie in Word verwenden, um Zeilenumbrüche sowie Leerzeichen und Tabulatoren anzuzeigen, nicht so gut. Und während Sie Registerkarten haben, ist es nicht wirklich klar, dass diese Registerkarten Ihnen Spalten geben, da ich in keinem Ihrer Bilder klare Datenspalten sehe, wahrscheinlich weil Sie sagen, dass die Spalten durcheinander sind. Können Sie auf ein Beispiel-PDF verlinken? zB auf ge.tt hochladen, dann kann jeder deine datei herunterladen (nicht unbedingt mit chrome), aber zB mit firefox.
Barlop

Die Registerkarten geben mir im Moment tatsächlich die erforderlichen Spalten, aber wenn ich hier hängenbleibe, könnte ich sie leicht in Leerzeichen umwandeln, um das Spaltenformat beizubehalten. Ich kann die PDF-Datei jedoch nicht bereitstellen, da diese vertrauliche Informationen enthält und ich den Text nicht wie in den anderen Beispielen anonymisieren kann.
Art

Antworten:


0

Word hat kein Objekt zum Markieren von Zeilenenden innerhalb von Absätzen, daher ist es eine schwierige Aufgabe.

Als Workaround können Sie:

  • platzieren Sie die Auswahl an den Anfang eines jeden Absatzes
  • Verschieben um eine Zeile (wie Pfeil nach unten drücken)
  • Gehen Sie ein Zeichen zurück und prüfen Sie, ob es sich um einen Absatzumbruch handelt
    • Wenn nicht, dann füge es hinzu

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

    Selection.Paragraphs(1).Range.Select
    Selection.Collapse wdCollapseStart
    Selection.MoveDown wdLine, 1
    Selection.MoveLeft wdCharacter, 1, True
    If Asc(Selection.Text) <> 13 Then
        Selection.InsertAfter Chr(13)
    End If

0

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.

    Dim aShape As Shape
Dim aParagraph As Paragraph

On Error Resume Next
Application.ScreenUpdating = False

For Each aShape In ActiveDocument.Shapes
    If aShape.Type = msoTextBox Then
        For Each aParagraph In aShape.TextFrame.TextRange.Paragraphs
            aParagraph.Range.Select
            Selection.Collapse direction:=wdCollapseStart
            Selection.HomeKey Unit:=wdLine
            Selection.EndKey Unit:=wdLine
            Do Until Asc(Selection.Text) = 13
                Selection.InsertAfter vbCrLf
                Selection.MoveDown wdLine, 1
                Selection.EndKey Unit:=wdLine
            Loop
        Next
    End If
Next aShape

Application.ScreenUpdating = True
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.