You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中readmatrix用变量指定Excel工作表报错的解决方法

MATLAB读取Excel年份工作表报错解决

问题背景

用户拥有涵盖2004-2022年的火车票价Excel数据集,编写MATLAB代码实现用户输入年份后,读取对应年份工作表中A1:A3区域的3个数据。但代码运行时报错,将代码中的变量year替换为具体年份数值(如2020)时则能正常返回数据。

报错信息

Error using readmatrix
The 'XLSX' format is not supported in this context. Set the 'UseExcel' parameter to true on Windows with Excel installed to read and write 'XLSB' or 'ODS' files and spreadsheets with interactive features, such as formulas and macros.
Error in plot_data (line 4)
data = readmatrix("train_fares.xlsx",'sheet',year,'range','A1:A3')

原代码

year = input('please select year between 2004 and 2022');
fprintf('you have chosen to see train fares from all sectors in %4.0f',year)
data = readmatrix("train_fares.xlsx",'sheet',year,'range','A1:A3')

问题原因与修复方案

核心问题

input函数默认返回数值类型,但readmatrix的'sheet'参数要求传入字符串类型的工作表名称。直接传入数值year会导致MATLAB无法正确匹配工作表,进而触发格式兼容类报错。

修复步骤及代码

方案1:将数值年份转为字符串

% 获取用户输入的年份数值
year = input('请选择2004至2022之间的年份:');
% 校验输入合法性
if year < 2004 || year > 2022
    error('输入年份不在指定范围内,请重新运行程序');
end
fprintf('你选择查看%d年各区域的火车票价\n', year);
% 将数值转为字符串后传入sheet参数
data = readmatrix("train_fares.xlsx",'sheet',string(year),'range','A1:A3');

方案2:直接读取字符串类型的年份输入

% 直接读取字符串格式的年份输入
year_str = input('请选择2004至2022之间的年份:', 's');
% 转为数值并校验合法性
year = str2double(year_str);
if isnan(year) || year < 2004 || year > 2022
    error('输入无效,请输入2004-2022之间的整数年份');
end
fprintf('你选择查看%d年各区域的火车票价\n', year);
% 直接使用字符串作为sheet参数
data = readmatrix("train_fares.xlsx",'sheet',year_str,'range','A1:A3');

额外处理(若Excel含交互特性)

如果你的Excel文件包含公式、宏等交互内容,需按照报错提示添加'UseExcel',true参数(仅适用于安装了Excel的Windows系统):

data = readmatrix("train_fares.xlsx",'sheet',string(year),'range','A1:A3','UseExcel',true);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:10:33