如何使用matlab将目录下不同的excel表合并成一个表

一、前言

小黑娃已经很久没上线更新文章了,因为工作和科研的双重压力,小黑娃便忽略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 文件。这部分代码如下:

    Matlab 复制代码
    files = 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

博主的每篇博文都是用心去写的,喜欢的可以多多支持和收藏,创作不易,未经作者允许,请勿转载或者抄袭。