【MATLAB】多个Excel表合并(按行、按列、按Sheet)
by 今天不飞了
之前发了生成excel表和合并excel表的文章,各种需求就来了……
在这里把几种基础的合并方法分享给大家,其他花里胡哨的筛选合并就不要问我了。整理excel真的很无聊,给钱也不做……除非“你给得太多”
代码
提供“文件路径,新excel文件名,合并类型”即可
function MultXlsIntoOne(xlsPath,xlsName,type)
% 获取所有xls列表
dirout1 = dir(fullfile(xlsPath,'*.xls'));
dirout2 = dir(fullfile(xlsPath,'*.xlsx'));
xlsList = { dirout1.name,dirout2.name};
fileNum = length(xlsList);
% 写
switch type
case 1 % row
idx = 1;
for n = 1:fileNum
disp([num2str(n),'--',xlsList{ n}])
[~,~,info] = xlsread(fullfile(xlsPath,xlsList{ n}));
xlswrite(fullfile(xlsPath,xlsName),info,1,['A',num2str(idx)])
infonum = size(info,1);
idx = idx+infonum;
end
case 2 % col
list = cell(fileNum,1);
shape = zeros(fileNum,2);
for n = 1:fileNum
disp([num2str(n),'--',xlsList{ n}])
[~,~,info] = xlsread(fullfile(xlsPath,xlsList{ n}));
list{ n} = info;
shape(n,:) = size(info);
end
out = cell(max(shape(:,1)),sum(shape(:,2)));
col = 0;
for n = 1:fileNum
out(1:shape(n,1),col+1:col+shape(n,2)) = list{ n};
col = col+shape(n,2);
end
xlswrite(fullfile(xlsPath,xlsName),out)
case 3 % sheet
warning('off')
for n = 1:fileNum
disp([num2str(n),'--',xlsList{ n}])
[~,~,info] = xlsread(fullfile(xlsPath,xlsList{ n}));
xlswrite(fullfile(xlsPath,xlsName),info,n)
end
end
end
测试
新建一个名为MultXlsIntoOne.m的脚本,把上面的代码复制进去保存,然后运行下面的代码
新建一个名为MultXlsIntoOne.m的脚本,把上面的代码复制进去保存,然后运行下面的代码
首先推荐把要合并的excel表放到一个文件夹里,然后调用函数
按Row合并
xlsPath = 'C:\我也不知道你的数据在哪里\数据'
MultXlsIntoOne(xlsPath,'随便取个名字.xlsx',1)
按Col合并
xlsPath = 'C:\我也不知道你的数据在哪里\数据'
MultXlsIntoOne(xlsPath,'随便取个名字.xlsx',2)
按sheet合并
xlsPath = 'C:\我也不知道你的数据在哪里\数据'
MultXlsIntoOne(xlsPath,'随便取个名字.xlsx',3)
效果不展示了,你们自己试一试
其他
- 别留言问我“如果我想这样,该怎么实现……”,问就是“for循环”……