MATLAB循环拆分Excel字符串写入时覆盖问题求助
问题修复与代码优化
原代码核心问题
- 每次循环调用
writecell会直接覆盖Excel文件,仅保留最后一次循环的处理结果 - 循环范围
i=2:423遗漏了C1(对应C{1})和C424(对应C{424})的数据 - 使用
C{i:i}传递给strsplit是错误的,这是1x1的cell数组而非字符串,会导致部分数据解析异常 - 未提前收集所有处理结果,而是逐次写入
修复后的代码
clc clear close all % 读取指定区域数据并转为cell数组 T = readtable("********","range", "C1:C424"); C = table2cell(T); % 初始化空cell数组存储所有去重后的结果 allResults = {}; % 遍历所有单元格(1到424,对应C1到C424) for i = 1:size(C,1) % 跳过空单元格或非字符串内容,避免报错 if isempty(C{i}) || ~ischar(C{i}) continue end % 按分号拆分字符串并去重 splitList = unique(strsplit(C{i}, ';')); % 过滤拆分后可能产生的空字符串 splitList = splitList(~cellfun(@isempty, splitList)); % 将当前单元格的处理结果追加到总集合中 allResults = [allResults; splitList']; end % 一次性写入所有结果到Excel,彻底解决覆盖问题 writecell(allResults, 'not_list.xlsx');
优化说明
- 提前初始化
allResults收集所有处理后的数据,最后一次性写入Excel,彻底解决覆盖问题 - 遍历范围改为
1:size(C,1),确保所有单元格都被处理 - 用
C{i}直接取出字符串传递给strsplit,保证解析逻辑正确 - 添加空值和非字符串判断,避免运行报错
- 额外过滤拆分后可能产生的空字符串,清理无效数据
内容的提问来源于stack exchange,提问作者Boo
相关产品推荐
相关产品推荐

