如何使用matlab将目录下不同的excel表合并成一个表
一、前言
小黑娃已经很久没上线更新文章了,因为工作和科研的双重压力,小黑娃便忽略C站很久了。今天即兴更新一篇,希望大家多多支持。有时候我们某个文件夹下有多个excel表,然后我们又想将他们合并成一个excel(多个sheet),那我们该怎么做呢?
二、核心步骤及代码
1、首先写一个 MATLAB 脚本,能够从文件夹中读取多个 Excel 文件,并将它们合并到一个总 Excel 文件中,每个文件放在一个单独的 sheet 里,代码如下:
% 选择文件夹
folderPath = uigetdir(pwd, '请选择包含 Excel 文件的文件夹');
if folderPath == 0error('未选择文件夹,程序终止。');
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) > 31sheetName = sheetName(1:31);end% 将数据写入目标文件的对应 sheetwritetable(data, outputFile, 'Sheet', sheetName);fprintf('文件 %s 已写入 sheet: %s\n', fileName, sheetName);
endfprintf('合并完成!结果文件保存在:%s\n', outputFile);
把上述代码保存为
merge_excel.m
。运行后,会弹出一个窗口,让你选择包含多个 Excel 文件的文件夹。
程序会把该文件夹里的所有
.xls
和.xlsx
文件合并成一个合并结果.xlsx
文件。这部分代码如下:files = dir(fullfile(folderPath, '*.xls*'));
每个 Excel 文件对应一个 sheet,sheet 的名字就是原文件名(过长会自动截断)。
上述代码会把文件夹下所有的excel进行合并,非常不友好,所以我们采取更合理、更便捷的读取方式。
2、手动多选 Excel 文件,这样在运行的时候,我们就可以自己选中几个文件(而不是整个文件夹全部读),代码如下:
% 合并多个 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) > 31sheetName = sheetName(1:31);end% 写入writetable(data, outputFile, 'Sheet', sheetName);fprintf('已写入: %s -> sheet %s\n', fileName, sheetName);
endfprintf('合并完成!结果文件在:%s\n', outputFile);
3、我们也可以在程序里写死要合并的文件名,比如我们只想合并 文件1.xlsx
和 文件2.xlsx
,那可以写成:
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) > 31sheetName = sheetName(1:31);endwritetable(data, outputFile, 'Sheet', sheetName);
end
博主的每篇博文都是用心去写的,喜欢的可以多多支持和收藏,创作不易,未经作者允许,请勿转载或者抄袭。