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

如何将含合并单元格的XLS文件导入MATLAB(保留合并格式)

解决MATLAB读取带合并单元格的XLS文件时NaN填充问题

我之前也被这个问题坑过!手动取消合并单元格不仅耗时,文件多的时候根本不现实。下面分享两个实用的MATLAB解决方案,帮你直接按合并格式导入数据:

方法1:用readtable替代xlsread(最简便)

xlsread确实会把合并单元格除第一个外都读成NaN,但MATLAB的readtable函数默认会自动填充合并区域的所有单元格,完美解决这个问题!

示例代码:

% 读取Excel文件,自动填充合并单元格内容
dataTable = readtable('你的文件路径.xls');

% 如果需要转换成矩阵格式(和xlsread的num输出类似)
dataMatrix = table2array(dataTable);

这个方法不需要额外处理,readtable会帮你把合并区域的每一行都填充成合并单元格的原始值,省心又高效。

方法2:基于COM接口扩展xlsread(兼容老版本需求)

如果因为某些原因必须用xlsread,可以通过MATLAB的COM接口直接操作Excel,读取合并区域信息并手动填充NaN:

示例代码:

% 先用xlsread读取原始数据和元信息
[rawNum, rawTxt, rawData] = xlsread('你的文件路径.xls');

% 启动Excel COM服务器
excelApp = actxserver('Excel.Application');
% 打开目标工作簿
workbook = excelApp.Workbooks.Open(fullfile(pwd, '你的文件路径.xls'));
% 选择要处理的工作表(这里选第一个)
targetSheet = workbook.Sheets.Item(1);

% 检查是否存在合并单元格
if targetSheet.MergeCells
    % 获取所有合并区域
    mergedAreas = targetSheet.UsedRange.MergeAreas;
    % 遍历每个合并区域
    for idx = 1:mergedAreas.Count
        currentArea = mergedAreas.Item(idx);
        % 获取合并区域的第一个单元格的值
        fillValue = currentArea.Item(1).Value;
        % 确定合并区域的行、列范围
        rowStart = currentArea.Row;
        rowEnd = rowStart + currentArea.Rows.Count - 1;
        colStart = currentArea.Column;
        colEnd = colStart + currentArea.Columns.Count - 1;
        % 填充整个区域的NaN
        rawNum(rowStart:rowEnd, colStart:colEnd) = fillValue;
    end
end

% 一定要关闭Excel并释放资源,避免残留进程
workbook.Close(false);
excelApp.Quit;
excelApp.delete;

注意事项:

  • 如果文件有多个工作表,需要循环处理每个Sheets.Item(n);
  • 若文件路径包含中文,确保MATLAB编码与系统一致,或用unicode2native转换路径后再传入;
  • 运行完代码后检查任务管理器,确保Excel进程已关闭,避免占用内存。

总结

优先推荐方法1,readtable是MATLAB后续主推的表格读取函数,功能更完善,处理合并单元格完全不需要额外操作。只有在必须兼容旧代码或特定场景下,再考虑方法2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:15