一、前言
小黑娃已经很久没上线更新文章了,因为工作和科研的双重压力,小黑娃便忽略C站很久了。今天即兴更新一篇,希望大家多多支持。有时候我们某个文件夹下有多个excel表,然后我们又想将他们合并成一个excel(多个sheet),那我们该怎么做呢?
二、核心步骤及代码
1、首先写一个 MATLAB 脚本 ,能够从文件夹中读取多个 Excel 文件,并将它们合并到一个总 Excel 文件中,每个文件放在一个单独的 sheet 里,代码如下:
Matlab
% 选择文件夹
folderPath = uigetdir(pwd, '请选择包含 Excel 文件的文件夹');
if folderPath == 0
error('未选择文件夹,程序终止。');
end
% 获取该文件夹下所有 Excel 文件(扩展名可能是 .xls 或 .xlsx)
files = dir(fullfile(folderPath, '*.xls*'));
% 如果没有找到 Excel 文件
if isempty(files)
error('该文件夹下没有 Excel 文件!');
end
% 设置合并后的文件名(存放在同一目录下)
outputFile = fullfile(folderPath, '合并结果.xlsx');
% 遍历每个文件
for i = 1:length(files)
% 读取文件路径
fileName = files(i).name;
filePath = fullfile(folderPath, fileName);
% 读取表格
data = readtable(filePath);
% 去掉扩展名作为 sheet 名(避免过长或非法字符)
[~, sheetName, ~] = fileparts(fileName);
% Excel sheet 名最大31个字符,超过需要截断
if length(sheetName) > 31
sheetName = sheetName(1:31);
end
% 将数据写入目标文件的对应 sheet
writetable(data, outputFile, 'Sheet', sheetName);
fprintf('文件 %s 已写入 sheet: %s\n', fileName, sheetName);
end
fprintf('合并完成!结果文件保存在:%s\n', outputFile);
-
把上述代码保存为
merge_excel.m
。 -
运行后,会弹出一个窗口,让你选择包含多个 Excel 文件的文件夹。
-
程序会把该文件夹里的所有
.xls
和.xlsx
文件合并成一个合并结果.xlsx
文件。这部分代码如下:Matlabfiles = dir(fullfile(folderPath, '*.xls*'));
-
每个 Excel 文件对应一个 sheet,sheet 的名字就是原文件名(过长会自动截断)。
上述代码会把文件夹下所有的excel进行合并,非常不友好,所以我们采取更合理、更便捷的读取方式。
2、手动多选 Excel 文件,这样在运行的时候,我们就可以自己选中几个文件(而不是整个文件夹全部读),代码如下:
Matlab
% 合并多个 Excel 文件到一个 Excel 文件中(手动选择)
[files, folderPath] = uigetfile({'*.xls;*.xlsx','Excel Files (*.xls, *.xlsx)'}, ...
'请选择要合并的Excel文件', ...
'MultiSelect', 'on');
% 如果用户取消选择
if isequal(files,0)
error('未选择文件,程序终止。');
end
% 转换成 cell 数组(如果只选一个文件,uigetfile返回字符串)
if ischar(files)
files = {files};
end
% 输出文件名
outputFile = fullfile(folderPath, '合并结果.xlsx');
for i = 1:length(files)
fileName = files{i};
filePath = fullfile(folderPath, fileName);
% 读取表格
data = readtable(filePath);
% 生成 sheet 名
[~, sheetName, ~] = fileparts(fileName);
if length(sheetName) > 31
sheetName = sheetName(1:31);
end
% 写入
writetable(data, outputFile, 'Sheet', sheetName);
fprintf('已写入: %s -> sheet %s\n', fileName, sheetName);
end
fprintf('合并完成!结果文件在:%s\n', outputFile);
3、我们也可以在程序里写死要合并的文件名,比如我们只想合并 文件1.xlsx
和 文件2.xlsx
,那可以写成:
Matlab
folderPath = 'C:\Users\你的用户名\Desktop\新建文件夹'; % 文件夹路径
fileList = {'文件1.xlsx', '文件2.xlsx'}; % 指定要合并的文件
outputFile = fullfile(folderPath, '合并结果.xlsx');
for i = 1:length(fileList)
filePath = fullfile(folderPath, fileList{i});
data = readtable(filePath);
[~, sheetName, ~] = fileparts(fileList{i});
if length(sheetName) > 31
sheetName = sheetName(1:31);
end
writetable(data, outputFile, 'Sheet', sheetName);
end
博主的每篇博文都是用心去写的,喜欢的可以多多支持和收藏,创作不易,未经作者允许,请勿转载或者抄袭。