Jak zaimportować zestaw danych do programu Excel? (nagłówki kolumn w każdym wierszu ograniczonym dwukropkiem)

1

Próbuję zaimportować następujący zestaw danych do programu Excel. Nie miałem szczęścia z kreatorem importu tekstu. Chciałbym, aby Excel tworzył nazwy, nazwy, ulice itp. Nazwy kolumn i wstawiał każdy rekord do nowego wiersza.

,
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

Czy jest jakiś prosty sposób, aby to zrobić za pomocą programu Excel? Trudno mi wymyślić sposób na łatwe przekonwertowanie go na konwencjonalny CSV. O ile mogę pomyśleć, musiałbym usunąć etykiety z każdej linii, ująć każdą linię w cudzysłów, a następnie rozdzielić je przecinkami. Oczywiście jest to nieco trudniejsze do skryptu, ponieważ niektóre pola (na przykład adres) zawierają dane rozdzielone przecinkami. W ogóle nie jestem dobry z regexem.

Jak najlepiej rozwiązać ten problem?

Anonymous
źródło
czy struktura jest zawsze taka sama? Czy zawsze jest 14 pól w tej samej kolejności?
nixda
Tak, zawsze 14 pól w tej samej kolejności.
Anonymous
dlaczego nie otworzyć go z pliku tekstowego, a następnie użyć Kopiuj & gt; PasteSpecial - Transpozycja do transpozycji danych
Our Man in Bananas

Odpowiedzi:

1

To makro działa z twoim przykładem.
(Zakładam, że wiesz, jak postępować z makrami 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
nixda
źródło
Byłem zbyt leniwy, aby zaimplementować kilka wierszy w polach nagłówka, więc musisz je wstawić samodzielnie. To nie jest wielka sprawa.
nixda
Dzięki nixda, ale kiedy uruchomię, otrzymuję „Błąd czasu wykonania” 5: Nieprawidłowe wywołanie procedury lub argument. Jeśli kliknę debugowanie, podświetla linię za pomocą strLine = Left (strLine, Len (strLine) -1). Jakieś pomysły?
Anonymous
Cóż, z plikiem tekstowym i przykładowymi wierszami powyżej działa dla mnie. Czy możesz gdzieś przesłać plik wejściowy?
nixda
Czy to moja wina, przypadkowo zapomniałem usunąć niektóre nagłówki z pełnego pliku. Działał idealnie, bardzo doceniany, dzięki. :)
Anonymous
0

Zakładając, że jest to operacja jednorazowa:

Użyj edytora tekstu z makrami klawiatury.

  1. Napisz makro, które przesuwa się „jeden blok” w dół, od pojedynczego przecinka do pojedynczego przecinka

  2. Przejdź przez dokument za pomocą tego makro, aby upewnić się, że wszystkie bloki zawierają wszystkie pola; jeśli nie, wstaw brakujące pola (linie)

  3. Zrób globalne zastąpienie: „na” „w przypadku, gdy w danych znajdują się podwójne cudzysłowy

  4. Napisz nowe makro, które otacza wszystkie linie w bloku podwójnymi cudzysłowami, a następnie połącz je, usuwając znak końca wiersza na końcu

  5. Wykonaj import CSV w Excelu

Uwagi:

  • Nie wszystkie kroki mogą być konieczne w zależności od rzeczywistych danych w całym pliku

  • Możliwe są wariacje na ten temat (np. Zamiana n na "n", aby szybko otoczyć wszystkie linie podwójnymi cudzysłowami), w zależności od rzeczywistych danych i możliwości edytora.

  • Być może będziesz musiał wypróbować różne warianty, aby rzeczywisty import CSV działał w programie Excel (np. Spróbuj otaczających pojedynczych cudzysłowów)

  • Przechowuj pliki pośrednie dla różnych kroków edycji, aby nie trzeba było powtarzać wszystkich kroków podczas próby

Jan Doggen
źródło