Jack
Jack

Reputation: 41

MATLAB: Save multiple tables in Excel using a while loop

I have the following while loop in which an image is read and analyzed, then the results are saved in a table, that is saved in an Excel worksheet. I initially did this code for one single image/table, then realized I need to develop it for n images.

I basically want the results to be saved in the same Excel worksheet without overwriting, ideally the tables are vertically separated by an empty row.

Here's my effort as for now:

while(1)
...
%code code code
...
message = sprintf('Do you want to save the results in an Excel 
worksheet?');
reply = questdlg(message,'Run Program?','OK','Cancel', 'OK');
if strcmpi(reply, 'Cancel')
% User canceled so exit.
return;
end


% Table creation. 
% code code code
% Saving table to Excel

T = table(Diameter,BandWidth,n1,n2,P1,P2,Damage,...
'RowNames',Band);
filename = 'Results.xlsx';
writetable(T, filename, 'Sheet',1, 'Range', 'A1','WriteRowNames',true);

% Create a while loop to save more experiments to the Excel worksheet.

promptMessage = sprintf('Do you want to process another photo?');
button = questdlg(promptMessage, 'Continue', 'Continue', 'Cancel', 
'Continue');
if strcmpi(button, 'Cancel')
break;
end
end

If it can help you to get an idea, each table is a 6x8.

Upvotes: 0

Views: 189

Answers (1)

JMikes
JMikes

Reputation: 672

Prior to your while loop, declare a cell array to hold the table that you will eventually write to an excel file.

cellArrayOfTableToBeWritten = {};

Also prior to the loop, define a cell array that will serve as a blank row.

rowWidth = 8;
blankrow = repmat({''},1,rowWidth);

Where you currently write the table, instead add what you would have written to the cell array with a blank row at the bottom.

cellArrayOfTableToBeWritten = [cellArrayOfTableToBeWritten;
                               T.Properties.VariableNames; 
                               table2cell(T); 
                               blankrow];

Once your while loop is done, write the combined cell array to a file as an excel file.

xlswrite(filename, cellArrayOfTableToBeWritten);

Upvotes: 1

Related Questions