如何将此数据集导入 Excel?(每行的列标题以冒号分隔)

如何将此数据集导入 Excel?(每行的列标题以冒号分隔)

我正在尝试将以下数据集导入 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 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

有没有简单的方法可以用 Excel 做到这一点?我正在努力想出一种方法来轻松地将其转换为传统的 CSV。据我所知,我必须从每一行中删除标签,将每一行括在引号中,然后用逗号分隔它们。显然,这让编写脚本变得更加困难,因为有些字段(例如地址)包含逗号分隔的数据。我根本不擅长正则表达式。

解决这个问题的最好方法是什么?

答案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

答案2

假设这是一次性操作:

使用具有键盘宏的文本编辑器。

  1. 编写一个宏,将“一个块”向下移动,从单个逗号移动到单个逗号

  2. 使用此宏检查文档,以确保所有块都包含所有字段;如果不包含,请插入缺失的字段(行)

  3. 如果数据中有双引号,请进行全局替换:将“替换为”

  4. 编写一个新宏,用双引号将块中的所有行括起来,然后通过删除末尾的换行符将它们连接起来

  5. 在 Excel 中执行 CSV 导入

评论:

  • 根据整个文件中的实际数据,并非所有步骤都是必要的

  • 对此可能存在一些变化(例如将 \n 替换为“\n”以快速将所有行用双引号括起来),具体取决于您的实际数据和编辑器的功能。

  • 您可能需要尝试各种方法才能使实际的 CSV 导入在 Excel 中工作(例如,尝试用单引号括住)

  • 保留不同编辑步骤的中间文件,这样您在尝试时不必重复所有步骤

相关内容