LibreOffice / Openoffice Calc合并行

时间:2015-12-30 15:41:48

标签: spreadsheet libreoffice openoffice-calc libreoffice-calc

我有一个很大的电子表格,有很多价值观,比如电话,邮件,手机等等,但我得到这个的应用程序每行只给出了其中一个值。 例如:如果一个联系人有三种通信方式,则产生三行。请参阅附件。

结果应该将信息合并到一行,也是附加的。

感谢您的想法!

before

after

2 个答案:

答案 0 :(得分:2)

对于LibreOffice Base来说,这是一项很好的任务。

  1. 文件 - >新 - >数据库。按“完成”以使用默认值,并选择保存数据库文件的位置。
  2. 在Calc窗口中,单击“Sheet1”选项卡(或包含数据的任何选项卡)并拖动到Base窗口中的Tables。选中“将第一行用作列名”和“创建主键”。然后按“创建”按钮创建Table1。
  3. 转到Queries,然后单击“在SQL视图中创建查询”。粘贴以下内容:

    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)
    
  4. 将查询保存为“Query1”并关闭查询。

  5. 右键单击“Query1”并复制。返回Calc并粘贴结果。
  6. Name  Lastname  phone           mail             mobile
    John  Doe       +49304856421    john@doe.com     +491704
    Lisa  Miller    +1327464361785  mail@exmple.com
    

答案 1 :(得分:0)

假设数据的排列方式是"之前"您可以使用公式填写缺失的信息,然后删除重复项。

首先插入一个新列" ID"作为具有唯一标识符的列A,希望串联的名字/姓氏就足够了:

=CONCATENATE(A2,"|",B2)

自动填充每一行。

接下来使用公式填写缺失的信息:

=IF(LEFT(C2,1)="", VLOOKUP(A2, A:C, 3, FALSE),C2)

此公式检查单元格左边的第一个字符是否与空格匹配,基本上该单元格是空白的,如果是,则查看" ID"专栏,找到" John | Doe"的第一场比赛。它返回电话号码,否则只留下当前的值。

如果您将其拖动并修改其他列的vlookup,例如电子邮件将

=IF(LEFT(D2,1)="", VLOOKUP(A2, A:D, 4, FALSE),D2)

然后删除""之后将留下的所有重复记录。你想要的形象。