You need to enable JavaScript to run this app. MATLAB批量读取多份Excel/CSV文件无需创建独立变量的方法
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB批量读取多份Excel/CSV文件无需创建独立变量的方法

原代码错误点拆解
  • 序号转换逻辑完全错误:代码中使用char(i)拼接文件名,MATLAB里char(数值)的作用是把输入值按ASCII码规则转成对应字符,比如i=1时,转换结果是不可见的ASCII控制符,根本不是预期的字符'1',拼出来的文件名和实际存储的文件名完全不匹配,自然出现序号识别错误的问题。
  • 存储类型不匹配:readtable返回的是表格类对象,不能用普通数值数组的索引方式(如t(i)=xxx)直接存储,强行赋值会触发类型不匹配的报错。
无需独立变量的批量读取实现方案

方案1:元胞数组存储(全版本通用,稳定性最高)

通过预分配定长元胞数组承接所有读取的表格,全程不需要为每个文件单独创建独立存储变量:

% 预分配1行20列的元胞数组,避免循环过程中动态扩容降低运行效率
t = cell(1, 20);
for i = 1:20
    % 正确将数字序号转为对应字符串,拼接出实际文件名
    m = [num2str(i), ".csv"];
    % 增加文件存在性校验,避免缺文件直接中断程序
    if ~isfile(m)
        warning("序号为%d的文件不存在,已跳过", i);
        continue;
    end
    % 将读取到的表格存入元胞的对应位置
    t{i} = readtable(m);
end

后续调用时,直接通过t{序号}即可访问对应文件的内容,比如对比第3份和第7份文件时,直接调用t{3}、t{7}完成取值,不需要单独访问t1、t2这类独立变量。

方案2:多维table数组存储(适配R2019a及以上版本)

如果MATLAB版本支持多维table类型,可以直接按原生表格数组结构存储,类型一致性更好:

% 预分配带第三维维度的空table占位
t = table.empty(0, 0, 20);
for i = 1:20
    m = sprintf("%d.csv", i);
    if ~isfile(m)
        warning("序号为%d的文件不存在,已跳过", i);
        continue;
    end
    t(1,1,i) = readtable(m);
end

后续通过t(1,1,i)即可访问对应序号文件的内容。

实操注意事项
  • 不要使用char(数字)做序号转字符串操作,统一用num2str()、sprintf()或者字符串类型直接拼接数字,从根源上避免序号转错的问题。
  • 如果实际存储的Excel/CSV文件名带固定前缀或后缀(如user_data_1.xlsx),只需要修改文件名拼接逻辑即可,循环框架不需要调整,例如适配该类文件名可改成m = "user_data_" + num2str(i) + ".xlsx"。

内容的提问来源于stack exchange,提问作者itit123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 02:36:01