我正在尝试将以下数据集导入 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
假设这是一次性操作:
使用具有键盘宏的文本编辑器。
编写一个宏,将“一个块”向下移动,从单个逗号移动到单个逗号
使用此宏检查文档,以确保所有块都包含所有字段;如果不包含,请插入缺失的字段(行)
如果数据中有双引号,请进行全局替换:将“替换为”
编写一个新宏,用双引号将块中的所有行括起来,然后通过删除末尾的换行符将它们连接起来
在 Excel 中执行 CSV 导入
评论:
根据整个文件中的实际数据,并非所有步骤都是必要的
对此可能存在一些变化(例如将 \n 替换为“\n”以快速将所有行用双引号括起来),具体取决于您的实际数据和编辑器的功能。
您可能需要尝试各种方法才能使实际的 CSV 导入在 Excel 中工作(例如,尝试用单引号括住)
保留不同编辑步骤的中间文件,这样您在尝试时不必重复所有步骤