MATLAB Answers


Import/convert an Excel file with more worksheets into a structure with more fields, one field for each worksheet

Asked by Mike
on 26 Jul 2019
Latest activity Commented on by Mike
on 26 Jul 2019
Hi All,
I would like to import/convert an excel file which has n worksheets, into a structure with n fields, like S.f1, S.f2, ..., S.fn, one field for each worksheet of the Excel file, in MATLAB.
Is there anyone who could help me?

  1 Comment

"into a structure with n fields, like S.f1, S.f2, ..., S.fn"
This would be better a non-scalar structure, with one field (or indeed, simply a cell array).

Sign in to comment.

1 Answer

Answer by Bob Nbob
on 26 Jul 2019
 Accepted Answer

Generally, importing multiple excel sheets is done by calling the xlsread command multiple times. One of the flags of the command is for designating which sheet you are using. The command does not import the information into a structure array, but you can reorganize the information from the imported matrix into a structure array easily enough.
for i = 1:nsheets
[~ ~ data] = xlsread('myexcelfile.xlsx',i);
[mystruct.data1] = data{range1};
[mystruct.data2] = data{range2};
[mystruct.data3] = data{range3};
[mystruct.data4] = data{range4};
Obviously you need to make your own ranges and structure fields, but the basic concept is sound.


I didn't know you could import directly into a structure like that, but I suppose it makes sense because will just be a large cell array.
Well, actually, I made a mistake and indeed should have made data a cell array
for i = 1:numel(sheets)
[~, ~,{i}] = xlsread(excelfile, i); %correct syntax!
edit: or another option is to make data a matrix and make the structure an array by indexing the structure rather than the field:
for i = 1:numel(sheets)
[~, ~, mystruct(i).data] = xlsread(excelfile, i);
Thank you very much Guillame! I really appreciate your help.
Best regards,

Sign in to comment.