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

时间:2017-08-24 18:44:28

标签: 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' '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') 

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

1 个答案:

答案 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会让它变得相对容易。