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

Matlab R2017b中readtable读取Excel缺失最后一列的问题及解决

MATLAB R2017b readtable 读取Excel时最后一列丢失的原因与解决办法

问题原因分析

从你的示例数据和读取结果来看,核心问题出在MATLAB R2017b版本中readtable的自动数据类型检测逻辑上:

  • 默认情况下,readtable会通过表格的前8行数据来判断每一列的数据类型。如果某一列的前8行都是空值,它会默认这一列没有有效数据,直接跳过读取。
  • 你的示例里前两行的IbXch列是空的,第三行才有值,刚好触发了这个检测规则,导致最后一列被忽略。

另外还要注意你代码里的这一行:

result(:,end)=[]; % append empty list in case no data

这行代码是主动删除结果的最后一列,就算后续解决了读取问题,这行也会把刚读到的最后一列删掉,建议先注释掉再测试。

解决方案

下面提供几种可行的解决办法,你可以根据自己的需求选择:

1. 手动指定所有列的数据类型

通过'VariableTypes'参数强制指定每一列的数据类型,让readtable必须读取所有列,不再依赖自动检测。比如你的表格有11列,对应设置类型如下(根据实际数据调整类型):

function assetslist = loadAssets()
xlFileDetails = 'mypath';
xlsheet = 'mysheet';
% 按列顺序指定数据类型,长度要和Excel列数一致
varTypes = {'double','string','string','string','double','string','string','string','string','string','string'}; 
result = readtable(xlFileDetails,'Sheet',xlsheet,...
    'ReadRowNames',true,'ReadVariableNames',true,...
    'VariableTypes',varTypes);
% result(:,end)=[]; % 注释掉这行,避免删除最后一列
assetslist = result;
end

2. 调整类型检测的行数上限

用'MaxRowsForTypeDetection'参数,让readtable检测所有行的数据来判断列类型,而不是只看前8行。可以先获取表格总行数,再设置这个参数:

function assetslist = loadAssets()
xlFileDetails = 'mypath';
xlsheet = 'mysheet';
% 先获取Excel表格的总行数
[~,~,rawData] = xlsread(xlFileDetails, xlsheet);
totalRows = size(rawData, 1);

result = readtable(xlFileDetails,'Sheet',xlsheet,...
    'ReadRowNames',true,'ReadVariableNames',true,...
    'MaxRowsForTypeDetection',totalRows);
% result(:,end)=[]; % 注释掉这行
assetslist = result;
end

3. 检查Excel文件格式

先确认Excel里的最后一列没有被隐藏,且该列所有单元格的格式统一(比如设为「常规」或「文本」格式),避免因单元格格式异常导致readtable识别错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:57:17