使用xlsread从多个excel文件中提取相同的列

时间:2014-12-28 16:14:47

标签: excel matlab extract xlsread

我在C盘上有一个目录,其中包含许多格式相同的excel文件。我想使用我在网上找到的以下脚本将每个文件中的H列复制到一个新文件中:

dirs=dir('C:\xxx\*.xlsx');
dircell=struct2cell(dirs);
filenames=dircell(1,:);
range = 'H:H';
n = (numel(filenames));
for i = 1:n;
     Newfile(:,i) = xlsread(filenames{i},range);
end

这会给出错误消息"订阅分配维度不匹配。"在结果文件(Newfile)中只提取了一列。

我玩了范围,发现当xlsread到达第一个文件列表的末尾时会发生错误,当值为空时会停止。我的专栏H有不同数量的填充值(即文件1有20,文件2有100,文件3有3等)。

所以,我的问题是是否可以修改这个脚本,以便在遇到空单元格时,提取空单元格或NaN单元格,最重要的是它将移动到下一列。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在家里没有Matlab,我必须从头顶开始 由于您读取的列H具有不同数量的有效条目,因此您不应该尝试将它们强制插入到结果数组NewFile中,而是使用临时变量

dirs=dir('C:\xxx\*.xlsx');
dircell=struct2cell(dirs);
filenames=dircell(1,:);
range = 'H:H';
n = numel(filenames);
Newfile = NaN*ones(1, n);
for nf = 1:n;
     tempVar = xlsread(filenames{nf},range);
     r = size(NewFile,1); % get number of rows in NewFile
     if length(tempVar) > r
         % Make Newfile big enough to fit column nf
         Newfile = [Newfile;NaN*ones(length(tempVar)-r,n)];
     end
     Newfile(:,nf) = tempVar;
end