如何在Excel中将垂直数据列表转换为水平

时间:2017-03-30 19:14:21

标签: excel csv vcard

我正试图将我父亲的旧诺基亚手机中的联系人导出到iPhone中。他们的旧软件诺基亚PC套件可以将这些联系人导出为CSV并导入纯文本,格式如下:

First Name: ...
Last Name: ...
Phone: ...

First Name: ...
Last Name: ...
Phone: ...

...

注意#1:有时候没有名字,只有最后电话号码。它们用换行符隔开。

CSV的问题在于编码搞砸了,我无法找出它是什么。我想知道如何从纯文本中将联系人导出到CSV甚至vCard中。

预期结果:

First Name | Last Name | Phone
FirstName1 | LastName1 | #####1
FirstName2 | LastName2 | #####2
FirstName3 | LastName3 | #####3

编辑:注意#2:有超过600个联系人 修改#2 ” 这是一个例子。左侧是源,右侧是我需要它的CSV文件。 BTW不介意那些“A”,这只是我父亲使用的优先事项......

1 个答案:

答案 0 :(得分:1)

我想办法在没有VBA宏/ UDF的情况下完成它。

这是一个基本公式,每列略有变化。

这是我测试过的布局: enter image description here

因此,如果您的数据以A1开头,并且每个“块”之间有间隔,则可以在C2中执行此操作:

=RIGHT(OFFSET($A1,(ROW()-2)*3,0),LEN(OFFSET($A1,(ROW()-2)*3,0))-SEARCH(":",OFFSET($A1,(ROW()-2)*3,0)))并将向下拖动

然后,在D2中使用相同的公式,但在$A1出现的地方$A2改为$A1除外。

E2中使用相同的公式,但每次出现$A1时都会将$A3更改为$A1并向下拖动。

修改:或者,您可以将其放在C2中,然后上下拖动。这是一个不需要每列编辑的公式:

=RIGHT(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0),LEN(OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0))-SEARCH(":",OFFSET(INDIRECT("$A"&ROW()-1+COLUMN()-3),(ROW()-2)*3,0)))