Rotineiramente preciso extrair o texto de arquivos parecidos com este:
Idealmente, de duas maneiras:
Apenas as linhas individuais de texto
Ex:
pronto, na verdade temos uma publicação lançadadesses dados e estamos trabalhando em
mais dados que foram apresentados recentemente em
Em forma de parágrafo (juntando o texto de diferentes linhas em um único bloco de texto que posso editar no Word, Google Docs, etc)
Ex:
pronto, na verdade temos uma publicação com esses dados e estamos trabalhando em mais dados que foram apresentados recentemente em
Quando recebo os arquivos, tudo está na Coluna A. Há duas linhas de números que não preciso, seguidas por uma linha de texto que preciso e, em seguida, uma linha em branco, após a qual o padrão se repete por milhares de linhas.
Obviamente, fazer isso manualmente leva muito tempo, então qualquer ajuda seria muito apreciada.
Responder1
Parece que você precisa extrair os dados de cada terceira linha da coluna A, ou seja, A3, A7, A10 ....
Em primeiro lugar, escreva 3, 7 nas duas primeiras células da coluna B e arraste para baixo para produzir uma série como 3, 7, 10, 13 .....
Agora, escreva a fórmula =INDIRETO("A"&B1) em C1 que mostrará o texto da célula A3. Copie a fórmula para mostrar o texto de A7, A10 e assim por diante.
Para combinar todo o texto, você pode usar as funções CONCAT ou TEXTJOIN se tiver o Excel 2016. A vantagem do TEXTJOIN é que você pode usar delimitadores como espaço ou vírgula entre os textos. Você também pode ignorar células vazias. No exemplo a seguir, espaço foi usado como delimitador e True foi usado para ignorar células vazias.
=TEXTJOIN(" ",TRUE,C1:C11)
Para versões anteriores, você pode usar a função CONCATENATE, mas deve escrever todas as referências de células uma por uma.
=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).
Responder2
Não acho que exista uma maneira fácil de fazer isso que não envolva escrever algum código. Provavelmente você pode fazer isso com VBA no Excel, mas não tenho muita experiência com isso.
Aqui está um exemplo de como você poderia fazer isso em Python. Este script percorrerá as células de uma determinada coluna e imprimirá o valor em um arquivo se não começar com um número.
Planilha Excel:
Exemplo de imagem de planilha do Excel
Saída:
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()
Responder3
Para simplificar a exclusão de linhas indesejadas no intervalo, é melhor classificá-las primeiro, para que por exemplo. todas as linhas vazias são agrupadas. É bastante simples usar a classificação interna de células, mas para manter a ordem inicial dos textos, são necessárias algumas etapas extras.
Vou me referir aos seus dados como estando dentro do alcance A1:A200
como exemplo. Ajuste conforme necessário aos seus dados reais.
Insira o dígito
1
na célulaB1
e o dígito2
na célulaB2
. Selecione as célulasB1:B200
e aplique a funçãofill
,linear
para terminar com 1 a 200 na colunaB
. Posteriormente, isso ajudará a retornar os textos em sua ordem inicial.Selecione o intervalo
A1:B200
e aplique a classificação. Agora você terá as linhas numéricas agrupadas, bem como as linhas do período de tempo, as linhas de texto e as linhas vazias. Assim é fácil selecionar e remover as linhas que você não deseja manter. Depois de excluir as linhas indesejadas, você deverá ter um intervalo, digamos,A1:B50
com os textos e seus números de linha originais na colunaB
.Para restabelecer a ordem correta dos textos, selecione o intervalo
A1:B50
e classifique-o na colunaB
.
Para copiar os textos Word
para processamento posterior, selecione, copie e cole em Word
. Remova a formatação da tabela e concatene as linhas com pesquisar e substituir (pesquisar paragraph
e substituir por space
).