标题: [文本处理] 如何把多个EXCEL或者CSV文件行行对应合并到一个EXCEL中 [打印本页]
作者: 司马光2008 时间: 2016-10-13 00:07 标题: 如何把多个EXCEL或者CSV文件行行对应合并到一个EXCEL中
本帖最后由 司马光2008 于 2016-10-14 01:04 编辑
各位,我有几千个EXCEL或者CSV文件需要一起合并到一个EXCEL中,并列排放,中间隔一个空格
打比方:
第一个文件:
AB
12
第二个文件:
CDF
345
合并到一个EXCEL中
AB CDF
12 345
作者: 司马光2008 时间: 2016-10-13 00:09
请各位多多帮忙
作者: 司马光2008 时间: 2016-10-13 00:12
使用下面的方式可以合并,但是只能首尾合并,不能并列合并
@echo off
E:
cd xls
dir
copy *.csv all_keywords.csv
echo @@@@@@@@@@@@@合并成功!@@@@@@@@@@@@@'
pause
*****************************
作者: DiamondbacK 时间: 2016-10-13 02:25
本帖最后由 DiamondbacK 于 2016-10-13 03:04 编辑
使用第三方程序 gawk。- # 2>nul 3>&2 & echo off & cls
- # & gawk -f "%~f0" %1.\*.csv > Merge.csv
- # & pause & exit /b
- # 使用方法:既可以放在 csv 文件所在目录直接执行,也可以放在别的位置,把 csv 所在目录拖到脚本图标上即可。
-
- BEGIN {
- while ( !isDone++ ) {
- for ( i = 1; i < ARGC; i++ ) {
- if ( getline < ARGV[i] == 1 ) {
- isDone = 0
- printf $0 " "
- }
- }
- print ""
- }
- }
复制代码
我自己生成了 1000 个 csv 来测试消耗时间,文件总体积 10.5 MiB,总共耗时 85 秒。CPU 是笔记本 i5 3 代。
作者: 司马光2008 时间: 2016-10-13 21:55
谢谢 DiamondbacK的回复,但是我只懂一点点批处理
作者: pcl_test 时间: 2016-10-14 00:07
本帖最后由 pcl_test 于 2016-10-14 01:02 编辑
- /*&cls&echo off
- del "$合并结果.csv" 2>nul
- dir /a-d/b *.csv|cscript -nologo -e:jscript "%~f0">"$.tmp"
- ren "$.tmp" "$合并结果.csv"
- pause&exit
- */
-
- var fso = new ActiveXObject('Scripting.FileSystemObject'), a=[];
- while(!WSH.StdIn.AtEndOfStream){
- var line = WSH.StdIn.ReadLine();
- var f = fso.OpenTextFile(line, 1);
- try{
- var txt = f.ReadAll().split(/[\r\n]+/);
- f.Close();
- for(var i=0;i<txt.length;i++)a[i]?a[i]+=' '+txt[i]:a[i]=txt[i];
- }catch(e){}
- }
- for(var b in a)WSH.echo(a[b]);
复制代码
作者: 司马光2008 时间: 2016-10-14 01:08
多谢pcl_test帮忙,可以把Excel并列合并了,但是合并后里面的内容全部混合在一起,无法分清原来的文件内容,并且中间也没有空格分开
作者: pcl_test 时间: 2016-10-14 01:14
本帖最后由 pcl_test 于 2016-10-14 01:18 编辑
回复 7# 司马光2008
你用什么软件打开的csv文件?空格还是空一列?复制代码
改为复制代码
用Excel打开,空一列
作者: Bella 时间: 2016-10-14 01:37
http://batch-cn.qiniudn.com/tool/2.1/paste.exe- paste -d" " *.csv > merge.csv
复制代码
作者: 司马光2008 时间: 2016-10-14 18:57
感谢pcl_test和各位的帮忙,已经可以了,再次感谢
作者: huangfei3777 时间: 2016-11-22 11:02
回复 6# pcl_test
您好,打扰了!
我要合并的csv行数不一样,合并后出现了一点错乱,还是用楼主的例子:
第一个文件: 第二个文件: 结果合并成了:
AB CDF AB CDF
12 345 12 345
678 678
请问代码该如何调整?谢谢了!
作者: pcl_test 时间: 2016-11-22 11:07
回复 11# huangfei3777
你都没说你想要的结果是什么,怎么调整?
作者: huangfei3777 时间: 2016-11-22 11:13
回复 12# pcl_test
抱歉,是我没说清楚,目标是这样的:
AB CDF
12 345
678
作者: pcl_test 时间: 2016-11-22 17:22
回复 13# huangfei3777 - /*&cls&echo off
- del "$合并结果.csv" 2>nul
- dir /a-d/b *.csv|cscript -nologo -e:jscript "%~f0">"$.tmp"
- ren "$.tmp" "$合并结果.csv"
- pause&exit
- */
-
- var fso = new ActiveXObject('Scripting.FileSystemObject'), a=[], b=[], n=0, m=1, max=0, s='';
- for(var i=0;i<5000;i++)s+=',';
- while(!WSH.StdIn.AtEndOfStream){
- var line = WSH.StdIn.ReadLine();
- var f = fso.OpenTextFile(line, 1);
- try{
- var txt = f.ReadAll().split(/[\r\n]+/);
- f.Close();if(txt.length>=max)max=txt.length;
- for(var i=0;i<txt.length;i++){
- if(!/"/.test(txt[i])){
- b[m]=txt[i].split(',').length;
- n+=b[m];break;
- }
- }
- for(var i=0;i<max;i++){
- if(a[i]){
- if(i<txt.length){
- a[i]+=','+txt[i];
- }else {a[i]+=s.substr(0, b[m]);}
- }else{
- if(m==1){
- a[i]=txt[i];
- }else a[i]=s.substr(0, n-b[m])+txt[i];
- }
- }
- m++;
- }catch(e){}
- }
- for(var b in a)WSH.echo(a[b]);
复制代码
作者: huangfei3777 时间: 2016-11-23 17:50
感谢pcl_test大神的大力支持!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |