2017-04-24 1 views
0

1xm-Cellarray을 내보내려는 경우 xlswrite을 사용합니다. 셀 어레이는 m 세포로 구성되어 포함 된 각 i 대부분 2,뿐만 아니라 3,4,5 또는 6이 여기에 데이터가 어떻게 보이는지의 예 수 있습니다 어디 ixn-Cellarray : 나는 모든 원하는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} 

셀은 서로 아래에 쓰여지지만 Excel에서 하나의 셀에 속한 행을 볼 수 있기를 원합니다. 내 생각은 xlswrite를 사용하여 exportTable 수출 다음이

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

처럼 배열 세포와 서로 사이에 빈 행을 넣어했다, 그러나 이것은 내 보낸 시트에서 꽤 추한 외모와 쉽게 읽을 수 없습니다.
지금은 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

내 문제를 completly 해결, 다시 한번 대단히 감사합니다! – Max

관련 문제