Rutinariamente necesito extraer el texto de archivos que se ven así:
Idealmente, de dos maneras:
Solo las filas individuales de texto.
Ej:
hecho, realmente tenemos una publicaciónde estos datos y estamos trabajando en
más datos que se presentaron recientemente en
En forma de párrafo (uniendo el texto de diferentes filas en un solo bloque de texto que puedo editar en Word, Google Docs, etc.)
Ej:
en realidad tenemos una publicación a partir de estos datos y estamos trabajando en más datos que se presentaron recientemente en
Cuando recibo los archivos, todo está en la columna A. Hay dos filas de números que no necesito, seguidas de una fila de texto que sí necesito y luego una fila en blanco, después de la cual el patrón se repite durante miles de filas.
Obviamente, hacer esto manualmente lleva mucho tiempo, por lo que cualquier ayuda sería muy apreciada.
Respuesta1
Parece que necesita extraer los datos de cada tercera fila de la columna A, es decir, A3, A7, A10....
En primer lugar, escriba 3, 7 en las dos primeras celdas de la columna B y arrastre hacia abajo para producir una serie como 3, 7, 10, 13...
Ahora, escribe la fórmula =INDIRECTA("A"&B1) en C1 que mostrará el texto de la celda A3. Copie la fórmula para mostrar el texto de A7, A10, etc.
Para combinar todo el texto, puede usar las funciones CONCAT o TEXTJOIN si tiene Excel 2016. El beneficio de TEXTJOIN es que puede usar delimitadores como espacios o comas entre los textos. También puedes ignorar las celdas vacías. En el siguiente ejemplo, se usó espacio como delimitador y True se usó para ignorar las celdas vacías.
=TEXTJOIN(" ",TRUE,C1:C11)
Para versiones anteriores, puede usar la función CONCATENAR pero debe escribir todas las referencias de celda una por una.
=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).
Respuesta2
No creo que exista una manera fácil de hacer esto que no implique escribir código. Probablemente puedas hacerlo con VBA en Excel, pero no tengo mucha experiencia con eso.
Aquí tienes un ejemplo de cómo puedes hacerlo en Python. Este script revisará las celdas de una columna determinada e imprimirá el valor en un archivo si no comienza con un número.
Hoja de Excel:
Imagen de hoja de Excel de muestra
Producción:
Here's the first string and the second now a third
Código:
from openpyxl import load_workbook # package for working with xls files
import re # regex package
workbookName = 'test.xlsx'
sheetName = 'Sheet1'
column = 'A'
maxRow = 50
outputFile = 'excelOutput.txt'
# Open the workbook
wb = load_workbook(workbookName)
# Create a file to put the data into
fh = open(outputFile, 'w')
# Loop through all the rows
for kk in range(1,maxRow):
# Grab the cell's value
cellValue = wb[sheetName][column+str(kk)].value
# If the cell isn't empty
if cellValue != None:
# If the cell doesn't start with a number
if not re.search("\\d",str(cellValue)[0]):
# Write the value from the cell into the text file
fh.write(cellValue)
# Close the file
fh.close()
Respuesta3
Para simplificar la eliminación de filas no deseadas en el rango, es mejor ordenarlas primero, de modo que f.ex. todas las filas vacías se agrupan. Es bastante sencillo utilizar la clasificación de celdas incorporada, pero para mantener el orden inicial de los textos, se requieren algunos pasos adicionales.
Me referiré a sus datos como si estuvieran dentro del rango A1:A200
como ejemplo. Ajuste según sea necesario a sus datos reales.
Inserte el dígito
1
en la celdaB1
y el dígito2
en la celdaB2
. Seleccione las celdasB1:B200
y aplique lafill
funciónlinear
para terminar con 1 a 200 en la columnaB
. Posteriormente, esto ayudará a devolver los textos en su orden inicial.Seleccione el rango
A1:B200
y aplique la clasificación. Ahora tendrá las filas numéricas agrupadas, así como las filas de marco de tiempo, las filas de texto y las filas vacías. Por lo tanto, es fácil seleccionar y eliminar las filas que no desea conservar. Después de eliminar filas no deseadas, debería tener un rango, por ejemploA1:B50
con los textos y sus números de fila originales en la columnaB
.Para restablecer el orden correcto de los textos, seleccione el rango
A1:B50
y ordénelo por columnaB
.
Para copiar los textos Word
para su posterior procesamiento, seleccione, copie y pegue en Word
. Elimine el formato de la tabla y concatene las filas con buscar y reemplazar (buscar paragraph
y reemplazar con space
).