如何在Matlab中使用readmatrix读取Excel指定工作表的多列数据
Matlab读取Excel多工作表实现方案
你当前使用的readmatrix('DATA_I.xlsx')默认仅读取Excel文件的第一个工作表,要读取多个工作表可参考以下实现:
基础实现(适用R2019a及以后版本)
第一步:获取所有工作表名称
all_sheets = sheetnames('DATA_I.xlsx');
第二步:批量读取所有工作表
方案1:存储为元胞数组,按索引调用
sheet_count = length(all_sheets); % 预分配元胞数组存储各工作表数据 Data_mat = cell(sheet_count, 1); for idx = 1:sheet_count % 指定Sheet参数读取对应工作表 Data_mat{idx} = readmatrix('DATA_I.xlsx', 'Sheet', idx); end
调用方式:读取第3个工作表数据直接使用Data_mat{3}即可。
方案2:存储为结构体,按工作表名称调用
sheet_count = length(all_sheets); Data_struct = struct(); for idx = 1:sheet_count % 替换工作表名中不符合Matlab结构体命名规则的字符 valid_sheet_name = matlab.lang.makeValidName(all_sheets{idx}); Data_struct.(valid_sheet_name) = readmatrix('DATA_I.xlsx', 'Sheet', all_sheets{idx}); end
调用方式:如果原工作表名为2024_销售数据,调用时直接使用Data_struct.x2024_销售数据即可。
常用自定义参数说明
你可以根据需求在readmatrix中补充参数调整读取规则:
- 跳过前N行表头:添加
'NumHeaderLines', N,例如跳过前2行表头写为readmatrix('DATA_I.xlsx', 'Sheet', idx, 'NumHeaderLines', 2) - 指定读取单元格范围:添加
'Range', '单元格范围',例如仅读取A列到D列的第3行到第200行写为readmatrix('DATA_I.xlsx', 'Sheet', idx, 'Range', 'A3:D200') - 读取时忽略空行:添加
'RemoveEmptyRows', true
旧版本Matlab兼容方案(R2019a之前版本)
如果你的Matlab版本没有内置readmatrix和sheetnames函数,可以用xlsfinfo和xlsread实现:
[~, all_sheets] = xlsfinfo('DATA_I.xlsx'); sheet_count = length(all_sheets); Data_mat = cell(sheet_count, 1); for idx = 1:sheet_count [Data_mat{idx}, ~, ~] = xlsread('DATA_I.xlsx', idx); end
内容的提问来源于stack exchange,提问作者Yaakov
相关产品推荐
相关产品推荐

