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
¡Gracias!
Peter
fuente
Respuestas:
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:
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).
fuente
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í.
fuente