Como importar este conjunto de dados para o excel? (cabeçalhos de coluna em cada linha delimitada por dois pontos)

1

Estou tentando importar o seguinte conjunto de dados para o Excel. Eu não tive sorte com o assistente de importação de texto. Gostaria que o Excel criasse id, nome, street, etc. os nomes das colunas e inserisse cada registro em uma nova linha.

,
id: sdfg:435-345,
name: Some Name,
type: ,
street: Address Line 1, Some Place,
postalcode: DN2 5FF,
city: Cityhere,
telephoneNumber: 01234 567890,
mobileNumber: 01234 567890,
faxNumber: /,
url: http://www.website.co.uk,
email: [email protected],
remark: ,
geocode: 526.2456;-0.8520,
category:    some, more, info

,
id: sdfg:435-345f,
name: Some Name,
type: ,
street: Address Line 1, Some Place,
postalcode: DN2 5FF,
city: Cityhere,
telephoneNumber: 01234 567890,
mobileNumber: 01234 567890,
faxNumber: /,
url: http://www.website.co.uk,
email: [email protected],
remark: ,
geocode: 526.2456;-0.8520,
category:    some, more, info

Existe alguma maneira fácil de fazer isso com o Excel? Eu estou lutando para pensar em uma maneira de converter isso em um CSV convencional facilmente. Tanto quanto eu posso pensar, eu teria que remover os rótulos de cada linha, coloque cada linha entre aspas e, em seguida, delimite-as com vírgulas. Obviamente, isso é um pouco mais difícil para o script, visto que alguns campos (endereço, por exemplo) contêm dados delimitados por vírgulas. Eu não sou bom com o regex em tudo.

Qual é a melhor maneira de resolver isso?

    
por Anonymous 28.06.2013 / 11:20

2 respostas

1

Esta macro está trabalhando com o seu exemplo.
(Eu suponho que você saiba como lidar com macros VBA)

Sub ImportDataset()
    strPath = Application.GetOpenFilename()
    Open strPath For Input As #1
    While Not EOF(1)
        Line Input #1, strLine
        If strLine = "," Or strLine = "," Then
            intRow = intRow + 1
            intCol = 0
        End If
        If InStr(strLine, ":") <> 0 Then
            intCol = intCol + 1
            intStart = InStr(strLine, ":")
            strLine = Mid(strLine, intStart + 2)
            strLine = Left(strLine, Len(strLine) - 1)
            ActiveSheet.Cells(intRow, intCol) = strLine
        End If
    Wend
    Close #1
End Sub
    
por 28.06.2013 / 12:58
0

Supondo que esta é uma operação única:

Use um editor de texto com macros de teclado.

  1. Escreva uma macro que mova 'um bloco' para baixo, da vírgula única para a vírgula única

  2. Percorra o documento com essa macro para garantir que todos os seus blocos contenham todos os campos; caso contrário, insira campos ausentes (linhas)

  3. Faça uma substituição global: "para" "caso haja aspas nos seus dados

  4. Escreva uma nova macro que envolva todas as linhas em um bloco com aspas duplas e, em seguida, concatene-as removendo o caractere de nova linha no final

  5. Faça a importação de CSV no Excel

Observações:

  • Nem todas as etapas podem ser necessárias dependendo dos dados reais em todo o seu arquivo

  • Há variações possíveis sobre isso (como substituir \ n por "\ n" para cercar rapidamente todas as linhas com aspas duplas), dependendo dos dados reais e das capacidades do editor.

  • Você pode ter que experimentar variações para fazer com que a importação real de CSV funcione no Excel (por exemplo, tente usar aspas simples ao redor)

  • Mantenha os arquivos intermediários para as diferentes etapas de edição, para que você não precise refazer todas as etapas ao tentar

por 28.06.2013 / 12:11