2017-08-24 26 views
0

我有很多單元陣列等xlswrite許多單元陣列到Excel作爲單獨命名片

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使它相對容易。