MATLAB中批量或循环读取Excel文件

在MATLAB中批量或循环读取Excel文件,您可以根据文件名的规律性选择不同的方法。

两种主流批量读取方法

您可以根据手头文件的特点,选择以下两种方式之一:

方法特点 适用场景 方法简述
方法一:按规律命名 文件名有规律的数字或字母序列,如 1.xlsx, 2.xlsx, ... 使用 for 循环配合 sprintfnum2str 生成文件名。
方法二:处理无规则文件 文件名无明确规律,或想读取特定文件夹下所有特定类型文件。 使用 dir 函数获取文件列表,再遍历读取。

方法一:文件名有规律

如果您的文件名为 data1.xlsx, data2.xlsx ... dataN.xlsx,可以使用循环来构造文件名:

% 假设需要读取5个文件
for i = 1:5
    % 构造文件名,例如 'data1.xlsx', 'data2.xlsx'...
    filename = sprintf('data%d.xlsx', i); 
    % 或者使用 filename = ['data', num2str(i), '.xlsx'];
    
    % 读取Excel文件
    data = readtable(filename);
    
    % 在这里对data进行你的处理...
    % 例如,将数据存入元胞数组
    allData{i} = data;
end

方法二:文件名无规律

如果想读取某个文件夹下所有的 .xlsx 文件,使用 dir 函数会更方便:

% 指定包含Excel文件的文件夹路径
folderPath = 'D:\your_folder_path\'; % 请替换为你的实际路径

% 获取文件夹下所有.xlsx文件的信息
fileList = dir(fullfile(folderPath, '*.xlsx')); 

% 遍历文件列表
for i = 1:length(fileList)
    % 获取单个文件名
    fileName = fileList(i).name;
    % 构造完整文件路径
    fullFilePath = fullfile(folderPath, fileName);
    
    % 读取Excel文件
    data = readtable(fullFilePath);
    
    % 在这里对data进行你的处理...
    disp(['已读取文件: ', fileName]); % 显示进度
    allData{i} = data;
end

核心读取函数与技巧

在批量读取时,准确获取所需数据至关重要。

  • 首选 readtable 函数:当前MATLAB官方推荐使用 readtable 来读取Excel,它能自动识别表头,并将数据转换为易用的表格(table)格式。
  • 指定位置和表单:你可以使用 readtable 的高级参数来精确读取。
    • data = readtable(filename, 'Sheet', 'Sheet1'); 指定读取名为 Sheet1 的工作表。
    • data = readtable(filename, 'Range', 'A1:D10'); 只读取 A1D10 这个区域的数据。
  • 兼容旧版 xlsread:如果使用旧版MATLAB,xlsread 仍可使用,语法类似。

提升性能与避免常见问题

处理大量文件时,效率和稳定性很重要。

  • 提升读取速度xlsread 函数在循环中调用可能较慢。如果数据是纯数值,可尝试 readmatrix 函数。此外,确保Excel文件没有损坏,且MATLAB有足够的内存。
  • 注意文件路径
    • 最简单的方法是将MATLAB的当前工作文件夹切换到你的Excel文件所在目录。
    • 或者在代码中使用绝对路径(如 'D:\MyData\file.xlsx'),但要注意不同操作系统的路径分隔符可能不同。
  • 处理合并单元格:尽量避免读取区域包含合并单元格,这可能导致数据读取错乱。

参考代码 批量读取excel文件或者循环读取excel文件 www.3dddown.com/cna/63279.html

完整实战示例

结合了上述要点的完整示例,演示如何读取特定文件夹下所有Excel文件的第一张工作表,并将数据存入一个元胞数组:

%% 批量读取Excel文件示例
clear; clc;

% 1. 设置路径并获取文件列表
folderPath = 'D:\your_excel_files\'; % 请修改为你的路径
fileList = dir(fullfile(folderPath, '*.xlsx'));

% 2. 初始化一个元胞数组来存储数据
allData = cell(1, length(fileList));

% 3. 循环读取文件
for i = 1:length(fileList)
    try
        % 构造完整路径
        fullPath = fullfile(folderPath, fileList(i).name);
        
        % 读取第一个工作表的全部数据
        data = readtable(fullPath, 'Sheet', 1);
        
        % 存储到元胞数组
        allData{i} = data;
        
        fprintf('成功读取: %s\n', fileList(i).name);
    catch ME
        warning('读取文件 %s 时出错: %s', fileList(i).name, ME.message);
    end
end

% 此时,allData 这个元胞数组里就包含了所有表格数据
posted @ 2025-12-15 09:30  令小飞  阅读(113)  评论(0)    收藏  举报