Palabra: reemplazar saltos de línea automáticos con retornos de carro

0

Tengo un problema bastante inusual. Tengo un archivo de MS Word (creado por Adobe Acrobat, el original era un PDF) que contiene varios cuadros de texto. El contenido de estos cuadros de texto debe analizarse para poder importarlo a una base de datos. El texto en el documento PDF está formateado en 2 columnas. Lamentablemente, la conversión de archivos en Adobe Acrobat no inserta un retorno de carro después de cada línea. Como resultado, cuando el DOCX se guarda como un archivo de texto, el texto se desordena. La conversión de archivos en Word, la opción "agregar líneas finales", no funciona para cuadros de texto o marcos de texto. Transformar todos los cuadros de texto en texto de párrafo también desordena el texto. En mi opinión, es la mejor manera de resolver esto, una macro vba que reconoce cada final de línea automático en cualquier cuadro de texto en el documento e inserta un retorno de carro. Sin embargo, yo' He intentado hacer esto con el marcador predefinido "\ line" pero tampoco parece funcionar en cuadros de texto. Sigo recibiendo un error "El objeto se elimina", que no ocurre si solo se selecciona el texto del párrafo (no en un cuadro de texto).

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

He probado otras herramientas de migración de archivos (pdf> docx o pdf> txt), pero obtuve el mejor resultado si la conversión de archivos se realiza utilizando MS Word como un bypass.

¿Alguien tiene algún consejo sobre cómo puedo hacer que esto funcione para mí en Word?

Captura de pantalla que describe el problema

Enlace al documento docx

¡Gracias!

Peter

Arte
fuente
¿Puedes incluir algunas capturas de pantalla
Barlop
También he encontrado que una buena manera de hacer su pregunta es producir algunos archivos de ejemplo concisos que demuestren el problema, y ​​luego cualquiera que intente responder puede tratar de resolver el problema de esos archivos. Entonces, eso con capturas de pantalla y mostrando claramente lo que quieres frente a lo que obtienes. Su pregunta no se ve mal, pero eso haría una mejor pregunta y una más probable para obtener una respuesta.
barlop
Capturas de pantalla agregadas! ¡Gracias!
Arte el
la mayoría de las personas no están tan familiarizadas con esa opción inusual que está usando en Word para mostrar retornos de carro y espacios y pestañas. Y aunque tiene pestañas, no está realmente claro que esas pestañas le den columnas, ya que no veo columnas claras de datos en ninguna de sus fotos, probablemente porque, como usted dice, las columnas se desordenaron. ¿Puede vincular a un PDF de ejemplo? por ejemplo, subir a ge.tt , cualquiera puede descargar su archivo (no necesariamente con Chrome), sino, por ejemplo, con Firefox.
barlop
De hecho, las pestañas me dan las columnas necesarias por ahora, pero si me atoro aquí, podría transformarlas fácilmente en espacios para preservar el formato de columna. Sin embargo, no puedo proporcionar el archivo PDF porque muestra información confidencial y no puedo anonimizar el texto como lo hice en los otros ejemplos.
Arte el

Respuestas:

0

Word no tiene un objeto para marcar los extremos de la línea dentro de los párrafos, por lo que es realmente una tarea difícil.

Como solución alternativa puede:

  • colocar la selección al comienzo de cada párrafo
  • moverse una línea (como presionar la flecha hacia abajo)
  • retroceder un personaje y verificar si se trata de un salto de párrafo
    • si no, entonces agrégalo

El siguiente ejemplo de código realiza este proceso para un párrafo, solo necesita recorrer todos los párrafos en sus cuadros de texto (lo he probado, también funciona con cuadros de texto).

    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
Máté Juhász
fuente
0

Gracias a Máté, no trajo la solución, pero me ayudó en la dirección correcta. En realidad y debido a que es complicado, fue un simple análisis del comportamiento de las selecciones cuando la tarea se realizó manualmente. Su solución asumió que solo había un final de línea automático dentro de un párrafo, pero había párrafos que usaban más de 2 líneas. Así es como lo resolví.

    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
Arte
fuente