View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

Join the 15-year community celebration.

Play games and win prizes!

» Learn more

3.6 | 9 ratings Rate this file 25 Downloads (last 30 days) File Size: 2.12 KB File ID: #26106 Version: 1.0




14 Dec 2009 (Updated )

reads Excel's files stored in .csv or .xls file formats and stores results as a struct

| Watch this File

File Information

CSV2STRUCT reads Excel's files stored in .xls or .csv file formats and stores results as a struct.
The Excel file is assumed to have a single header row. The output struct will have a field for each column and the field name will be based on the column name read from the header.
Unlike csvread, csv2struct is able to read files with both text and number fields and store data as fields of a struct. Likely works on Windows machines only.
See also:
  MATLAB's csvread and xlsread functions
  xml_read from my xml_io_tools which creates struct out of xml files


This file inspired Struct Array Conversion.

MATLAB release MATLAB 7.7 (R2008b)
MATLAB Search Path
Other requirements Microsoft Excel
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (13)
22 Feb 2016 Jason Baxter

I need to transfer data structures from Matlab to C, I was hoping this would do it but this doesn't work if the structures have more than one level.

For example:

>> test.a1.a2.a4=1;
>> test.a1.a2.a2=10;
>> test.a11.a2.a1=1;
>> test.b=[12;42;12];
>> test.c={'safds','sdfs'};

Runs but produces nonsense. Please fix or list the limitations in the description and help entry.

17 Sep 2015 Andrea

Andrea (view profile)

I keep getting the following error message when trying to run the code...

Invalid field name: '@'.

Error in csv2struct_TEST (line 82)
Out.(name) = num(:,iNum);

Any suggestions for debugging? Am I missing something?

Comment only
12 Aug 2014 Andrew

Andrew (view profile)

28 Jun 2013 chang hsiung

can this be used in Mac ?

Comment only
21 Dec 2012 Thai

Thai (view profile)

Great code.

Comment only
04 Dec 2012 Michael

Awesome script! CSV only works for me if i have a header with more than one character.

Comment only
25 Sep 2012 Jeff Barton

Just what I was looking for. Thank you.

15 Aug 2011 shlomix

shlomix (view profile)

it didn't work well for me when I passed a csv file which size exceeded 2^16.

03 Jan 2011 Pete

Pete (view profile)

@Ged: "***If your system does not have Excel for Windows installed, or MATLAB cannot access the COM server, xlsread operates in basic mode. In this mode, xlsread only reads XLS files.***"

Yeah this is unfortunate - would seem to mean that this script will only work on windows machines. Not the author's fault, but down-rated accordingly =/

12 Nov 2010 Michael Chan

Michael Chan (view profile)

It's really useful.
just a minor error.

line 78: name = char('A'-1+c);
instead of
name = char('A'-1+i);

16 Aug 2010 Alfred

Alfred (view profile)

25 Mar 2010 Ged Ridgway

Ged Ridgway (view profile)

Really useful submission!

Works nicely on .xls, but doesn't seem to work on .csv for me... In particular, xlsread (which csv2struct relies on even for .csv) doesn't seem happy with .csv files at all; I'm not sure if this is a platform issue (xlsread under Windows can be more advanced than xlsread under Linux, which I'm currently using) or a version issue (I'm currently using R2006a). Any ideas? (It's easy enough to convert csv to xls, and then use it, but csv is more widely compatible than xls for other software...)

16 Mar 2010 Pete

Pete (view profile)

Have only just started playing with this script, but so far it seems to be another truly excellent utility from Jaroslaw Tuszynski.

Does everything it says. Columns with text come out as cells. Columns with numbers come out as matrices. And all of them are stored in a structure such that you can reference them by the name of the column header.

This seems to me far superior to anything else I've found either here on FEX, or built in to Matlab (though I'm only running R2007a at the moment, so I can't comment on newer releases).

Will post an update if I come across any problems further down the line, but on present experience I highly recommend this script!

22 Feb 2016 1.0

Updated syntax and removed no longer needed code for reading CSV files with more than 2^16 rows. Excel no longer has that limitation.

Contact us