我有很多像
这样的单元格数组set1 = {'year' 'date' 'day' 'time';
'2017' '0803' 'Monday' '15.15';
'2015' '0303' 'Tuesday' '08.20'}
set2 = {'year' 'date' 'day' 'time';
'2016' '0705' 'Friday' '17.15';
'2013' '0310' 'Monday' '18.20'}
title = {'dataset1' 'dataset2'}
我拥有的单元格阵列更长(400-1000行),我有大约20个不同的集合,但数量会根据我的GUI数据而变化。我想要做的是自动将所有这些数组导出到一个Excel电子表格中,每个数据集都作为一个单独的工作表,并在" title"中指定工作表名称。串。
到目前为止我正在使用
[FileNameBodeWrite, PathNameBodeWrite] = uiputfile({'*.xls'},'Save As...', ...
[Title{1,1} '.xls']);
xlswrite([PathNameBodeWrite FileNameBodeWrite ],[Set1],1,'A1')
但那当然只适用于一个特定的集合。我想将它们全部包含在一个电子表格中,可能是使用循环,但我不确定如何实现它?
答案 0 :(得分:1)
您可以创建集合的单元格数组
sets = {set1, set2} % and so on
然后简单地遍历集合。使用xlswrite
看起来像这样
[FileNameBodeWrite,PathNameBodeWrite] = uiputfile({'*.xls'},'Save As', [Title{1,1} '.xls']);
for ii = 1:numel(sets)
% If the sheet title{ii} doesn't exist, it will be created
xlswrite([PathNameBodeWrite FileNameBodeWrite],sets{ii},title{ii},'A1');
end
修改强>:
分配sets = {set1, set2}
等正在复制内存中的所有数据。 引用集合的更有效方法是使用匿名函数句柄。基本上我们指向单元格数组而不是将副本存储在另一个单元格数组中:
% Using the @ notation to define anonymous functions
sets = {@()set1, @()set2};
for ii = 1:numel(sets)
% Note the brackets after sets{ii}(), this calls the function handle in sets{ii}
xlswrite([PathNameBodeWrite FileNameBodeWrite],sets{ii}(),title{ii},'A1');
end
即使是这个小例子也可以看出差异
sets = {set1, set2}; whos sets
>> Name Size Bytes
sets 1x2 3126
sets = {@()set1, @()set2}; whos sets
>> Name Size Bytes
sets 1x2 288
请注意,尽管上述内容应该有效,但由于每次使用xlswrite
时都要打开和关闭文件,因此速度非常慢。更快捷的方法是直接访问Excel对象。当你对此有所了解时,我可能只是坚持一下有效的方法,但如果你想优化一些东西,那么File Exchange function xlswrite1
会让它变得相对容易。