1

Я пытаюсь импортировать следующий набор данных в Excel. Мне не повезло с мастером импорта текста. Я бы хотел, чтобы Excel сделал id, name, street и т.д. Имена столбцов и вставил каждую запись в новую строку.

,
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@address.com,
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@address.com,
remark: ,
geocode: 526.2456;-0.8520,
category:    some, more, info

Есть ли простой способ сделать это с помощью Excel? Я изо всех сил пытаюсь найти способ легко преобразовать это в обычный CSV. Насколько я могу судить, мне нужно было удалить метки с каждой строки, заключить каждую строку в кавычки, а затем разделить их запятыми. Очевидно, что это немного усложняет сценарий, хотя некоторые поля (например, адрес) содержат данные, разделенные запятыми. Я плохо разбираюсь в регулярных выражениях.

Какой лучший способ справиться с этим?

2 ответа2

1

Этот макрос работает с вашим примером.
(Полагаю, вы знаете, как обращаться с макросами 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
0

Предполагая, что это разовая операция:

Используйте текстовый редактор с клавиатурными макросами.

  1. Напишите макрос, который перемещает "один блок" вниз от одной запятой до одной запятой

  2. Просмотрите документ с помощью этого макроса, чтобы убедиться, что все ваши блоки содержат все поля; если нет, вставьте пропущенные поля (строки)

  3. Сделайте глобальную замену: "в", если в ваших данных есть двойные кавычки

  4. Напишите новый макрос, который окружает все строки в блоке двойными кавычками, а затем объединяет их, удаляя символ новой строки в конце

  5. Сделайте импорт CSV в Excel

Примечания:

  • Не все шаги могут быть необходимы в зависимости от фактических данных в вашем файле

  • Возможны различные варианты (например, замена \n на «\n», чтобы быстро окружить все строки двойными кавычками), в зависимости от ваших фактических данных и возможностей вашего редактора.

  • Возможно, вам придется попробовать варианты, чтобы фактический импорт CSV работал в Excel (например, можно попробовать заключить в одинарные кавычки)

  • Сохраняйте промежуточные файлы для разных шагов редактирования, чтобы вам не пришлось переделывать все шаги при попытке

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .