【已解决】LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
- yq-ysy
- 论坛版主
- 帖子: 4652
- 注册时间: 2008-07-19 12:44
- 来自: 广西(桂)南宁(邕)
【已解决】LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
LibreOffice电子表格里,已经有一个工作表,其中有A列和B列数据,遇到两个问题:
(1)如何去除A列和B列并列时的重复行?例如原本有A列和B列数据如下:
1 一
2 二
2 二
2 贰
3 三
需要删除其中多出的“2 二”重复行,希望得到:
1 一
2 二
2 贰
3 三
——如果使用“数据--高级筛选--只显示不重复项”只能判断第一列,会把所有带 2 的行都删除,
(2)如何把B列接续到A列下方?——最好把结果放到另一个工作表里。希望得到:
1
2
2
2
3
一
二
二
贰
三
——如果能实现修改第一个工作表,这个接续的第二个工作表也能自动跟随改变,就更好了。
-------------------- 解决方案总结 -------------------
第一个问题感谢 jmxhyz 提供思路。现在已经得到解决,方法和步骤是:
(a)选中A列和B列的标题头,点击工具栏的”标准筛选按钮“,
(b)点击A列和B列的标题头的下拉菜单,选择”标准筛选…“,弹出”标准筛选“窗口,
(c)在”标准筛选“窗口里,第一个”字段名“选择A列的标题头,右边的”值“选择”非空“;
——解决了”需要删除A列空内容单元格所在行“的问题。
(d)在”标准筛选“窗口里,展开”选项“,勾选”无重复值”即可。
——解决了“需要删除A列和B列时的重复行”的问题(其实是重复行是被折叠隐藏起来了)。
第二个问题——手工接续,感谢 谢宝良 提供。
可以先 ctrl+shift+end 从所选单元格全选至右下角末尾
然后 ctrl+shift+左箭头,即可快速当初所选单元格所在一列。
(或者,先 ctrl+shift+end 然后 shift+左箭头 这样就能逐个取消被多选的其它列,只选中需要的单列了。)
然后手工复制粘贴就能把B列接续到A列了。
第二个问题——宏接续,见23楼,也许需要修改,感谢 jmxhyz 提供。
第二个问题——AWK脚本接续,见13楼,感谢 谢宝良 提供。
(1)如何去除A列和B列并列时的重复行?例如原本有A列和B列数据如下:
1 一
2 二
2 二
2 贰
3 三
需要删除其中多出的“2 二”重复行,希望得到:
1 一
2 二
2 贰
3 三
——如果使用“数据--高级筛选--只显示不重复项”只能判断第一列,会把所有带 2 的行都删除,
(2)如何把B列接续到A列下方?——最好把结果放到另一个工作表里。希望得到:
1
2
2
2
3
一
二
二
贰
三
——如果能实现修改第一个工作表,这个接续的第二个工作表也能自动跟随改变,就更好了。
-------------------- 解决方案总结 -------------------
第一个问题感谢 jmxhyz 提供思路。现在已经得到解决,方法和步骤是:
(a)选中A列和B列的标题头,点击工具栏的”标准筛选按钮“,
(b)点击A列和B列的标题头的下拉菜单,选择”标准筛选…“,弹出”标准筛选“窗口,
(c)在”标准筛选“窗口里,第一个”字段名“选择A列的标题头,右边的”值“选择”非空“;
——解决了”需要删除A列空内容单元格所在行“的问题。
(d)在”标准筛选“窗口里,展开”选项“,勾选”无重复值”即可。
——解决了“需要删除A列和B列时的重复行”的问题(其实是重复行是被折叠隐藏起来了)。
第二个问题——手工接续,感谢 谢宝良 提供。
可以先 ctrl+shift+end 从所选单元格全选至右下角末尾
然后 ctrl+shift+左箭头,即可快速当初所选单元格所在一列。
(或者,先 ctrl+shift+end 然后 shift+左箭头 这样就能逐个取消被多选的其它列,只选中需要的单列了。)
然后手工复制粘贴就能把B列接续到A列了。
第二个问题——宏接续,见23楼,也许需要修改,感谢 jmxhyz 提供。
第二个问题——AWK脚本接续,见13楼,感谢 谢宝良 提供。
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
用Li的宏很容易搞定了。单单想用筛选功能,应该不行。yq-ysy 写了:LibreOffice电子表格里,已经有一个工作表,其中有A列和B列数据,遇到两个问题:
(1)如何去除A列和B列并列时的重复行?例如原本有A列和B列数据如下:
(2)如何把B列接续到A列下方?——最好把结果放到另一个工作表里。希望得到:
——如果能实现修改第一个工作表,这个接续的第二个工作表也能自动跟随改变,就更好了。
或者构造多一个数列(合并第一二列),把它作为筛选条件。
上次由 谢宝良 在 2016-04-22 11:39,总共编辑 1 次。
- tang.zhe
- 帖子: 1505
- 注册时间: 2010-07-15 13:31
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
看看可行否?
见更新附件。
见更新附件。
- 附件
-
- sample.ods.zip
- (8.44 KiB) 已下载 160 次
上次由 tang.zhe 在 2016-04-22 13:21,总共编辑 1 次。
Ubuntu 命令技巧: http://wiki.ubuntu.org.cn/index.php?tit ... iant=zh-cn
Ubuntu 桌面指南: https://help.ubuntu.com//
Ubuntu 桌面指南: https://help.ubuntu.com//
- Ping-Wu
- 帖子: 1822
- 注册时间: 2012-11-14 9:34
- 系统: Debian 12
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
Mark 一下,有时间再回来。yq-ysy 写了:LibreOffice电子表格里,已经有一个工作表,其中有A列和B列数据,遇到两个问题:
(1)如何去除A列和B列并列时的重复行?例如原本有A列和B列数据如下:
(2)如何把B列接续到A列下方?——最好把结果放到另一个工作表里。希望得到:
——如果能实现修改第一个工作表,这个接续的第二个工作表也能自动跟随改变,就更好了。
- yq-ysy
- 论坛版主
- 帖子: 4652
- 注册时间: 2008-07-19 12:44
- 来自: 广西(桂)南宁(邕)
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
谢谢各位的热心帮助。tang.zhe 写了:看看可行否?
见更新附件。
我研究学习了仁兄的样本文件,你所采用的思路原理基本弄懂了,不过也有一些问题不明白……
第(1)个问题,
你是先把A列和B列的内容合并起来【公式 =A2&B2】,放在第三列,
然后在第四列里,为第三列每个单元格进行条件统计,如果大于1就标注为1【公式 =IF(COUNTIF(C$1:C2,C2)>1,1,"")】
这样实现了“在第四列标注出重复行“,——但没有实现”删除重复行“功能。
由于数据有可能多达数万条,无法手工删除,因此,还需要想办法实现”自动删除重复行“(可以把结果放在另两列)。
此外,从你的例子里,也学到了一招,很实用:
选中列标题,然后在工具栏里,点击启用”自动筛选按钮“,即可实现带下拉菜单排序的功能。
第(2)个问题,
方法主要用到 INDIRECT 函数,返回一个以文字格式输入的单元格引用的内容。
基本可以解决把B列接续到A列,但实际应用遇到一些更复杂的情况时,会出问题。
在另一个工作表里,先用两列来查找原A列和B列的结尾,即判断该单元格内容是否为0,如果为0就是结尾,
如果不是结尾就标注为1 【公式 =IF(INDIRECT("Sheet1.A"&ROW())=0,0,1)】
——这里有个问题,就是A列或B列的内容里,有可能包含内容为0或者为空的单元格,这就会造成后续公式的判断错误。
继续,经过上述公式,在新的工作表里得到新a列和新b列两列数字1,
然后在第三列里,【公式 =INDIRECT(IF(A2>0,"sheet1.a"&ROW(),"sheet1.b"&ROW()-COUNTA(Sheet1.A$1:A$10000)+1))】
即判断新a列是否大于0,即是否有内容,如果有,就返回原工作表的A列相应单元格内容,放在第三列里。
如果判断a列没有内容,那么就提取原工作表的B列相应单元格的内容,
但此时已经计数到了A列的末尾,因此,需要在B列定位到(A列末尾减去A列总数+1)的位置,就可以得到原始B列的准确位置。
然后继续沿着A列走下去,就能把B列内容逐一也提取出来,接续放在新工作表的第三列后面了。
——这里有两个问题,
一是A列末尾减去A列总数,使用的是10000这个数字,而实际数据有可能多达几万,有没有一个专门用于”统计某列行数“的函数??
二是刚才第(1)个问题里说的,是A列或B列的内容里,有可能包含内容为0或者为空的单元格,这里会造成公式的判断错误。
实际应用中,如果遇到带有空内容的单元格,是需要删除这一行的(我最早没有提出这个要求,是不想一次麻烦大家太多……)。
-
- 帖子: 78
- 注册时间: 2012-02-12 20:44
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
第一个问题,使用“标准筛选”即可完成,而且“标准筛选”可以设置、组合四个筛选条件。勾上“无重复值”即可过滤重复项。
也就是说,标准筛选可以去除四列重复的行。
至于第二个问题,上面的解决方法,导致整个工作表全是公式,如果要重算的话,直接影响工作效率。
倒不如几行简单的宏代码。
(这也是Linux下,WPS无法成气候的最大原因)
也就是说,标准筛选可以去除四列重复的行。
至于第二个问题,上面的解决方法,导致整个工作表全是公式,如果要重算的话,直接影响工作效率。
倒不如几行简单的宏代码。
(这也是Linux下,WPS无法成气候的最大原因)
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
既然是数万行的数据,还是建议awk脚本处理较快速。
- yq-ysy
- 论坛版主
- 帖子: 4652
- 注册时间: 2008-07-19 12:44
- 来自: 广西(桂)南宁(邕)
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
谢谢 jmxhyz 提供思路。jmxhyz 写了:第一个问题,使用“标准筛选”即可完成,而且“标准筛选”可以设置、组合四个筛选条件。勾上“无重复值”即可过滤重复项。
也就是说,标准筛选可以去除四列重复的行。
至于第二个问题,上面的解决方法,导致整个工作表全是公式,如果要重算的话,直接影响工作效率。
倒不如几行简单的宏代码。
(这也是Linux下,WPS无法成气候的最大原因)
现在第一个问题已经得到解决,方法和步骤是:
(a)选中A列和B列的标题头,点击工具栏的”标准筛选按钮“,
(b)点击A列和B列的标题头的下拉菜单,选择”标准筛选…“,弹出”标准筛选“窗口,
(c)在”标准筛选“窗口里,第一个”字段名“选择A列的标题头,右边的”值“选择”非空“;
——解决了”需要删除A列空内容单元格所在行“的问题。
(d)在”标准筛选“窗口里,展开”选项“,勾选”无重复值”即可。
——解决了“需要删除A列和B列时的重复行”的问题(其实是重复行是被折叠隐藏起来了)。
第二个问题,我从来没有用过宏,还请多多指教。
感觉通过这样的实践操作,能学到很多东西。
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
LibreOffice的宏实现这个目的也简单,但数万行数据运行时间30分钟以上一次。
脚本处理,哪怕有10万行,也只要数秒钟而已。
脚本处理,哪怕有10万行,也只要数秒钟而已。
- yq-ysy
- 论坛版主
- 帖子: 4652
- 注册时间: 2008-07-19 12:44
- 来自: 广西(桂)南宁(邕)
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
谢谢你提供的语句,我试试。不知道数万条记录,在电子表格里“筛选”是不是也会很慢呢?
如果也很慢的话,恐怕“删除重复行、删除带有空单元格数据的行、按升序排序”这三个工作也得用awk语言来完成……
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
如果只要两列数据都存在的行,那得加个条件:
如果单个数据中间有空格,如A列的第一个数据是12 3
那必须在excel里边用替换功能,把这个单个数据内部的空格换成其他的独特字符,整理后再粘贴回excel,再替换回空格。
使用筛选或者数据透视表功能当然要比宏要快很多。
代码: 全选
awk '!a[$0]++{if(NF==2){print $1}}' xxx.txt > 123.txt
awk '!a[$0]++{if(NF==2){print $2}}' xxx.txt >> 123.txt
代码: 全选
awk '!a[$0]++{if(NF==2){print $0}}' xxx.txt > 123.txt
那必须在excel里边用替换功能,把这个单个数据内部的空格换成其他的独特字符,整理后再粘贴回excel,再替换回空格。
使用筛选或者数据透视表功能当然要比宏要快很多。
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
代码: 全选
这个考虑得比较周密:
awk -F"\t" '!a[$0]++{if($1!="" && $2!=""){print $1}}' xxx.txt > 123.txt
awk -F"\t" '!a[$0]++{if($1!="" && $2!=""){print $2}}' xxx.txt >> 123.txt
-
- 帖子: 78
- 注册时间: 2012-02-12 20:44
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
谢宝良 写了:LibreOffice的宏实现这个目的也简单,但数万行数据运行时间30分钟以上一次。
脚本处理,哪怕有10万行,也只要数秒钟而已。

不要吓人。LibreOffice处理数万行数据,也是一两秒的事情。用“宏”也是一样。
本来“宏”就是把操作自动化而已,如果LibreOffice本身处理数据不慢的话,用“宏”也是不会慢的。
如果用“宏”慢,基本上是编写不合理,突出问题是,时间浪费在LibreOffice界面的重绘和单元格公式的重算上。在宏运行的时候,先关闭重绘和重算。
-
- 帖子: 1983
- 注册时间: 2010-05-01 21:23
Re: LibreOffice电子表格里,如何去除A列和B列并列时的重复行?如何把B列接续到A列下方?
jmxhyz 写了:谢宝良 写了:LibreOffice的宏实现这个目的也简单,但数万行数据运行时间30分钟以上一次。
脚本处理,哪怕有10万行,也只要数秒钟而已。![]()
不要吓人。LibreOffice处理数万行数据,也是一两秒的事情。用“宏”也是一样。
本来“宏”就是把操作自动化而已,如果LibreOffice本身处理数据不慢的话,用“宏”也是不会慢的。
如果用“宏”慢,基本上是编写不合理,突出问题是,时间浪费在LibreOffice界面的重绘和单元格公式的重算上。在宏运行的时候,先关闭重绘和重算。
那应该是本人孤陋寡闻了。
不过,我在使用官方的宏说明文件的时候,用writer打开,查找个单词都要两三秒。
数万行数据,
一两秒就完成比较并剔除重复行数据,我倒是很想知道它是如何实现的。
用hiden选项?