将信息合并到一行
Merge information to one line
我有一个很大的电子表格,其中包含很多值,例如 'phone、邮件、手机等等,但是我从中获取这些值的应用程序每行只给我其中一个值。例如:如果一个联系人有三种通信方式,它会产生三行。请查看文件:
before
after
结果应该将信息合并到一行。
假设数据按照 "before" 图像中显示的方式布局,您可以使用公式来填充缺失的信息,然后删除重复项。
首先插入一个新列"ID"作为具有唯一标识符的列A,希望First/Last连接的名称就足够了:
=CONCATENATE(A2,"|",B2)
为每一行自动填充。
接下来用公式补缺信息:
=IF(LEFT(C2,1)="", VLOOKUP(A2, A:C, 3, FALSE),C2)
此公式检查单元格中左侧的第一个字符是否匹配,基本上单元格为空,如果是,则在 "ID" 列上进行 vlookup,找到 [= 的第一个匹配项30=] 它 returns phone 数字,否则它只会保留当前的值。
如果您将其拖过并修改其他列的 vlookup,例如电子邮件将是
=IF(LEFT(D2,1)="", VLOOKUP(A2, A:D, 4, FALSE),D2)
然后删除所有重复记录,您将得到您想要的 "after" 图片。
这对 LibreOffice Base 来说是个好任务。
- 文件 -> 新建 -> 数据库。按 "Finish" 使用默认值,并选择一个位置来保存数据库文件。
- 在 Calc window 中,单击 "Sheet1" 选项卡(或包含数据的任何选项卡)并拖动到 Base window 中的
Tables
。检查 "Use first line as column names" 和 "Create primary key"。然后按"Create"按钮创建Table1。
转到 Queries
并单击 "Create Query in SQL view." 粘贴以下内容:
SELECT DISTINCT T1.Name, T1.Lastname, T2.phone, T3.mail, T4.mobile
FROM Table1 T1
LEFT JOIN (SELECT Name, Lastname, phone FROM Table1 WHERE phone IS NOT NULL) T2 ON (
T2.Name = T1.Name AND T2.Lastname = T1.Lastname)
LEFT JOIN (SELECT Name, Lastname, mail FROM Table1 WHERE mail IS NOT NULL) T3 ON (
T3.Name = T1.Name AND T3.Lastname = T1.Lastname)
LEFT JOIN (SELECT Name, Lastname, mobile FROM Table1 WHERE mobile IS NOT NULL) T4 ON (
T4.Name = T1.Name AND T4.Lastname = T1.Lastname)
将查询另存为 "Query1" 并关闭查询。
- Right-click 在 "Query1" 上复制。返回 Calc 并粘贴结果。
Name Lastname phone mail mobile
John Doe +49304856421 john@doe.com +491704
Lisa Miller +1327464361785 mail@exmple.com
我有一个很大的电子表格,其中包含很多值,例如 'phone、邮件、手机等等,但是我从中获取这些值的应用程序每行只给我其中一个值。例如:如果一个联系人有三种通信方式,它会产生三行。请查看文件:
before
after
结果应该将信息合并到一行。
假设数据按照 "before" 图像中显示的方式布局,您可以使用公式来填充缺失的信息,然后删除重复项。
首先插入一个新列"ID"作为具有唯一标识符的列A,希望First/Last连接的名称就足够了:
=CONCATENATE(A2,"|",B2)
为每一行自动填充。
接下来用公式补缺信息:
=IF(LEFT(C2,1)="", VLOOKUP(A2, A:C, 3, FALSE),C2)
此公式检查单元格中左侧的第一个字符是否匹配,基本上单元格为空,如果是,则在 "ID" 列上进行 vlookup,找到 [= 的第一个匹配项30=] 它 returns phone 数字,否则它只会保留当前的值。
如果您将其拖过并修改其他列的 vlookup,例如电子邮件将是
=IF(LEFT(D2,1)="", VLOOKUP(A2, A:D, 4, FALSE),D2)
然后删除所有重复记录,您将得到您想要的 "after" 图片。
这对 LibreOffice Base 来说是个好任务。
- 文件 -> 新建 -> 数据库。按 "Finish" 使用默认值,并选择一个位置来保存数据库文件。
- 在 Calc window 中,单击 "Sheet1" 选项卡(或包含数据的任何选项卡)并拖动到 Base window 中的
Tables
。检查 "Use first line as column names" 和 "Create primary key"。然后按"Create"按钮创建Table1。 转到
Queries
并单击 "Create Query in SQL view." 粘贴以下内容:SELECT DISTINCT T1.Name, T1.Lastname, T2.phone, T3.mail, T4.mobile FROM Table1 T1 LEFT JOIN (SELECT Name, Lastname, phone FROM Table1 WHERE phone IS NOT NULL) T2 ON ( T2.Name = T1.Name AND T2.Lastname = T1.Lastname) LEFT JOIN (SELECT Name, Lastname, mail FROM Table1 WHERE mail IS NOT NULL) T3 ON ( T3.Name = T1.Name AND T3.Lastname = T1.Lastname) LEFT JOIN (SELECT Name, Lastname, mobile FROM Table1 WHERE mobile IS NOT NULL) T4 ON ( T4.Name = T1.Name AND T4.Lastname = T1.Lastname)
将查询另存为 "Query1" 并关闭查询。
- Right-click 在 "Query1" 上复制。返回 Calc 并粘贴结果。
Name Lastname phone mail mobile John Doe +49304856421 john@doe.com +491704 Lisa Miller +1327464361785 mail@exmple.com