2017-04-24 17 views
0

1xm-Cellarrayをエクスポートする場合は、xlswriteを使用します。私はすべて欲しいExcelにデータをエクスポートしてフォーマットを適用する

a=[{{{'a'},{'b'},{'c'},{'d'};{'a'},{'b'},{'c'},{'d'}}},{{{'a'},{'b'},{'c'},{'d'};{'a'},{'b'},{'c'},{'d'};{'a'},{'b'},{'c'},{'d'}}},{{{'a'},{'b'},{'c'},{'d'};{'a'},{'b'},{'c'},{'d'}}}] 

a = 

    {2x4 cell} {3x4 cell} {2x4 cell} 

:セルアレイがm細胞iはほとんど2ですが、また、3,4,5または6ことができここで、データがどのように見えるかの例ですixn-Cellarrayを含む各で構成されていセルはお互いの下に書かれていますが、どの行が1つのセルに属していたかをExcelで確認できるようにしたいと考えています。私の考えでは、この

exportTable=[]; 
for jj=1:numel(a) 
    exportTable=[exportTable;a{jj};repmat({[]},1,18)]; 
end 

のような配列のセルと他の上の間に空行を入れ、その後、xlswriteを使用してexportTableをエクスポートすることでしたが、これは、エクスポートシートにかなり醜いと読みやすいではありません。
今私は、MATLABのエクスポート機能を使用するか、入力として対応する行のベクトルでExcelを使用して、同じ色で着色された各セルの行を取得する方法を探しています。
私は

rows=cumsum(cellfun(@(x) size(x,1),a)) 

rows = 

    2  5  7 

を使用して、各セルの終了インデックスを達成できた。しかし、私はrownumbersをもとにExcelで行を着色する方法がわかりません。
私の例のための所望の出力は次のようになります。
example output

のMatlabやExcelを使用してすべてのヘルプは高く評価されます。

+0

Excelで簡単なマクロを作成します。私はmatlab内のフォーマットは非常に醜い得ることができると思う。 –

+0

@ValerioRacoそうですね、どのようにExcelでそのようなマクロを作成しますか? – Max

答えて

1
rows = cumsum(cellfun(@(x) size(x,1),a)) 

%Create an Excel object. 
e = actxserver('Excel.Application'); 

%Add a workbook. 
eWorkbook = e.Workbooks.Add; 
e.Visible = 1; 

%Make the first sheet active. 
eSheets = e.ActiveWorkbook.Sheets; 
eSheet1 = eSheets.get('Item',1); 
eSheet1.Activate 

for i = 1:length(a) 
    ai = table2array(cell2table(a{:,i})); % sorry for this construction 

    if mod(i,2) 
     ai_color = 3; 
    else 
     ai_color = 4; 
    end 

    ai_range = ['A',num2str(rows(i)-size(ai,1)+1),':',char('A'-1+size(ai,2)),num2str(rows(i))]; % ... and this :) 

    % Set the color of cells 
    eSheet1.Range(ai_range).Interior.ColorIndex = ai_color; 

    %Put MATLAB data into the worksheet. 
    eActivesheetRange = get(e.Activesheet,'Range',ai_range); 
    eActivesheetRange.Value = ai; 
end 


SaveAs(eWorkbook,'myfile.xlsx') 

%If the Excel program displays a dialog box about saving the file, select the appropriate response to continue. 

%If you saved the file, then close the workbook. 
eWorkbook.Saved = 1; 
Close(eWorkbook) 

%Quit the Excel program and delete the server object. 
Quit(e) 
delete(e) 

%Note: Make sure that you close workbook objects you create to prevent potential memory leaks. 
+0

はかなりしっかりしています。残念ながら私は家にWindowsシステムを持っていないので、今すぐ試すことはできません。私は週にそれを試して、あなたにあなたの答えを受け入れる/あなたの答えを与えるでしょう。あなたの努力のために非常にありがとう! :) – Max

+0

私の問題を完全に解決しました、もう一度大変ありがとうございます! – Max

関連する問題