简体   繁体   中英

I want to export my Data in a Cell Array to an Excel file, as tidy as possible, without semi-colons for new rows

I have a Cell Array of dimensions 2 by 40, and each cell contains a matrix of dimensions 3 by 3:

[3x3 double]    [3x3 double]    [3x3 double] ... [3x3 double]
[3x3 double]    [3x3 double]    [3x3 double] ... [3x3 double]

Now, I need to print this Cell Array and show it to my study group. Below is the detailed example of what I am trying to achieve.

Print should show each matrix in the cell clearly and separately, so that we can study it better, similar to this:

 [1 2 3]    [5 2 3] 
 [4 5 6]    [1 2 2]    ...
 [7 8 9]    [7 8 9]

 [5 2 3]    [4 5 6]   
 [3 5 6]    [7 2 9]    ...
 [7 1 9]    [5 2 3]

I tried converting Cell to Table, unfortunately this was untidy, as it showed each new row of matrices with semi-colons:

 [1 2 3; 4 5 6; 7 8 9]

Also, I tried converting Cell to Double with:

 data = [cell{1,:};cell{2,:}];

resulting in 6 by 120 double, looking like this:

 1 2 3 5 2 3
 4 5 6 1 2 2    ...
 7 8 9 7 8 9
 5 2 3 2 5 6   
 3 5 6 7 2 9    ...
 7 1 9 5 2 3

I can export this to an Excel file, however you can see that it is still cumbersome. I can cut and paste the rows 4,5,6 and shift them below so that it looks like:

 1 2 3 5 2 3
 4 5 6 1 2 2    ...
 7 8 9 7 8 9

 5 2 3 2 5 6   
 3 5 6 7 2 9    ...
 7 1 9 5 2 3

however I still need to divide every other 3 columns, so that I can achieve what I want, which is very impractical:

 1 2 3  5 2 3
 4 5 6  1 2 2    ...
 7 8 9  7 8 9

 5 2 3  2 5 6   
 3 5 6  7 2 9    ...
 7 1 9  5 2 3

I would really appreciate your help on this one. Thank you in advance.

To display a complex cell array like this, you can use celldisp to display the cell in an understandable way.

% Create some example data
D = arrayfun(@(x)rand(3,3), ones(2,2), 'uni', 0);

% Display it
celldisp(D)

Another possible way to display this is to create a custom little routine to print the data.

formatspec = '%10.4f';

format = repmat([repmat([formatspec ' '], [1 size(D{1},2)]), '    '], [1 size(D,2)]);
arrayfun(@(k)fprintf('%s\n', sprintf([format, '\n'], cat(2, D{k,:}).')), 1:size(D,1))

A third option, if you really want to export to Excel, you will want to alter the fprintf statement to create a CSV file.

fid = fopen('data.csv', 'w');
% Create the format specifier for a row
format = repmat([repmat('%0.4f,', [1 size(D{1}, 2)]), ','], [1 size(D,2)]);
format(end-1:end) = ''; 

for k = 1:size(D, 1)
    fprintf(fid, [format '\n'], cat(2, D{k,:}).');

    % Create an empty row
    fprintf(fid, ',\n');
end

fclose(fid);

The result when loaded in Excel.

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM