xls将许多单元格数组作为单独的命名表写入Excel

xls将许多单元格数组作为单独的命名表写入Excel,excel,matlab,Excel,Matlab,我有很多像这样的细胞阵列 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'

我有很多像这样的细胞阵列

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') 

但这当然只适用于一个特定的集合。我想通过使用循环将它们全部包含在一个电子表格中,但我不确定如何实现这一点?

您可以创建集合的单元格数组

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

编辑

赋值
set={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对象。由于您是新手,我可能只会坚持使用有效的方法,但如果您想优化,则该方法会使操作相对简单。

太好了,谢谢。问题是我想创建一个包含许多数据集的电子表格。