How to read all rows of an Excel with missing rows included?

11 views (last 30 days)
My goal is to read all contents of an Excel file as cells using the function "readcell". However, every time when I used this function, it automatically eliminates any rows with missing contents above. How do I force this function to read the entire content of an Excel file with the missing rows above included?
  4 Comments
Image Analyst
Image Analyst on 9 Mar 2025
Edited: Image Analyst on 9 Mar 2025
Did you use sortrows on your array? Do you have any data at all in row #1?
If you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
Leon
Leon on 9 Mar 2025
See attached for an example dataset.
The first 3 rows have no data, but it is important to read them into my cell array. Otherwise, the location of the header row is messed up.
My header row locaiton is determined as below. It did consider the missing rows. That's the main reason I want to read the missing values in.
opts = detectImportOptions('test2.xlsx');
headerRowNo = str2double(extract(opts.VariableNamesRange, digitsPattern));

Sign in to comment.

Accepted Answer

dpb
dpb on 9 Mar 2025
Edited: dpb on 9 Mar 2025
Actually, I had forgotten until the error message above reminded me...there is one way without the import options struct, but it uses an undocumented argument list named parameter pair...so it's unlikely one will think of trying it.
fn='test2.xlsx';
c=readcell(fn,'DataRange','A1')
c = 23x19 cell array
Columns 1 through 10 {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metadaa info'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metada info2'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'EXPOCODE' } {'Cruise_flag'} {[<missing>]} {'STATION_ID'} {'CAST_NO' } {'NISKIN_ID'} {'NISKIN_FLAG'} {'SAMPLE_ID'} {'YEAR_UTC' } {'MONTH_UTC'} {'32P020130821'} {'A' } {[<missing>]} {[ 1]} {[ 2]} {[ 1]} {[ 2]} {[ 10201]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 20202]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 3]} {[ 2]} {[ 3]} {[ 2]} {[ 30203]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 4]} {[ 2]} {[ 4]} {[ 2]} {[ 40204]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 5]} {[ 2]} {[ 5]} {[ 2]} {[ 50205]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 6]} {[ 2]} {[ 6]} {[ 2]} {[ 60206]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 7]} {[ 2]} {[ 7]} {[ 2]} {[ 70207]} {[ 2013]} {[ 8]} Columns 11 through 18 {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'DAY_UTC' } {'TIME_UTC' } {'LATITUDE_DECIMAL'} {'LONGITUDE_DECIMAL'} {'DEPTH_BOTTOM_M...'} {'CTDPRESSURE_DBAR'} {'CTDTEMP_ITS90_...'} {'CTDSAL_PSS78'} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5130]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4670]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4000]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4520]} {[ 7.5639]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5040]} {[ 7.5638]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4620]} {[ 7.5637]} {[ 33.8123]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4800]} {[ 7.5637]} {[ 33.8124]} Column 19 {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'CTDSAL_FLAG'} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]}
The documentation still has only 'Range' as the named parameter and indicates that should control where the data are read from, but as we've seen here, it doesn't.
I haven't tried but I presume that maybe one can specify any fieldname that exists in the appropriate type of import object struct; note that it is 'DataRange' there.
I don't recall if I've submitted this as bug/enhancement/documentation error or not...it really should be on their hit list of fixes one way or another.
I just checked to see if newer documentation showed anything different, but it still has the same descripation at readcell

More Answers (3)

dpb
dpb on 9 Mar 2025
Edited: dpb on 9 Mar 2025
You can see if it has been fixed (I submitted bug/enhancement report quite some time ago), but I'm still at R2021b, but
readcell('tst.xlsx','range','A1')
should work, but it didn't as of R2021b
The simplest workaround uses an import data options object--
opt=detetctimportoptions('test.xlsx'); % create the base default import struct
opt.DataRange='A1'; % tell it to read data from the start
readcell('test.xlsx',opt) % read using the import options
Locally, R2021b
>> readcell('test.xlsx','range','A1')
ans =
3×3 cell array
{[ 1.00]} {[ 2.00]} {[ 3.00]}
{1×1 missing} {1×1 missing} {1×1 missing}
{[ 4.00]} {[ 5.00]} {[ 6.00]}
>> opt=detectImportOptions('test.xlsx')
opt =
SpreadsheetImportOptions with properties:
Sheet Properties:
Sheet: ''
Replacement Properties:
MissingRule: 'fill'
ImportErrorRule: 'fill'
Variable Import Properties: Set types by name using setvartype
VariableNames: {'Var1', 'Var2', 'Var3'}
VariableTypes: {'double', 'double', 'double'}
SelectedVariableNames: {'Var1', 'Var2', 'Var3'}
VariableOptions: Show all 3 VariableOptions
Access VariableOptions sub-properties using setvaropts/getvaropts
VariableNamingRule: 'modify'
Range Properties:
DataRange: 'A2' (Start Cell)
VariableNamesRange: ''
RowNamesRange: ''
VariableUnitsRange: ''
VariableDescriptionsRange: ''
To display a preview of the table, use preview
>> opt.DataRange='A1';
>> readcell('test.xlsx',opt)
ans =
4×3 cell array
{1×1 missing} {1×1 missing} {1×1 missing}
{[ 1.00]} {[ 2.00]} {[ 3.00]}
{1×1 missing} {1×1 missing} {1×1 missing}
{[ 4.00]} {[ 5.00]} {[ 6.00]}
>>
  1 Comment
dpb
dpb on 9 Mar 2025
readcell('test2.xlsx') % default fails to read blank line
ans = 20x19 cell array
Columns 1 through 10 {'Metadaa info'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metada info2'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'EXPOCODE' } {'Cruise_flag'} {[<missing>]} {'STATION_ID'} {'CAST_NO' } {'NISKIN_ID'} {'NISKIN_FLAG'} {'SAMPLE_ID'} {'YEAR_UTC' } {'MONTH_UTC'} {'32P020130821'} {'A' } {[<missing>]} {[ 1]} {[ 2]} {[ 1]} {[ 2]} {[ 10201]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 20202]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 3]} {[ 2]} {[ 3]} {[ 2]} {[ 30203]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 4]} {[ 2]} {[ 4]} {[ 2]} {[ 40204]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 5]} {[ 2]} {[ 5]} {[ 2]} {[ 50205]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 6]} {[ 2]} {[ 6]} {[ 2]} {[ 60206]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 7]} {[ 2]} {[ 7]} {[ 2]} {[ 70207]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 8]} {[ 2]} {[ 8]} {[ 2]} {[ 80208]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 9]} {[ 2]} {[ 9]} {[ 2]} {[ 90209]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 10]} {[ 2]} {[ 10]} {[ 2]} {[ 100210]} {[ 2013]} {[ 8]} Columns 11 through 18 {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'DAY_UTC' } {'TIME_UTC' } {'LATITUDE_DECIMAL'} {'LONGITUDE_DECIMAL'} {'DEPTH_BOTTOM_M...'} {'CTDPRESSURE_DBAR'} {'CTDTEMP_ITS90_...'} {'CTDSAL_PSS78'} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5130]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4670]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4000]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4520]} {[ 7.5639]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5040]} {[ 7.5638]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4620]} {[ 7.5637]} {[ 33.8123]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4800]} {[ 7.5637]} {[ 33.8124]} {[ 21]} {[ 0.7310]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4810]} {[ 7.5647]} {[ 33.8114]} {[ 21]} {[ 0.7322]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 29.8690]} {[ 7.5750]} {[ 33.8007]} {[ 21]} {[ 0.7337]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 19.8430]} {[ 7.7612]} {[ 33.7177]} Column 19 {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'CTDSAL_FLAG'} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]}
readcell('test2.xlsx','range','A1') % has starting range been fixed yet???
ans = 20x19 cell array
Columns 1 through 10 {'Metadaa info'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metada info2'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'EXPOCODE' } {'Cruise_flag'} {[<missing>]} {'STATION_ID'} {'CAST_NO' } {'NISKIN_ID'} {'NISKIN_FLAG'} {'SAMPLE_ID'} {'YEAR_UTC' } {'MONTH_UTC'} {'32P020130821'} {'A' } {[<missing>]} {[ 1]} {[ 2]} {[ 1]} {[ 2]} {[ 10201]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 20202]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 3]} {[ 2]} {[ 3]} {[ 2]} {[ 30203]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 4]} {[ 2]} {[ 4]} {[ 2]} {[ 40204]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 5]} {[ 2]} {[ 5]} {[ 2]} {[ 50205]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 6]} {[ 2]} {[ 6]} {[ 2]} {[ 60206]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 7]} {[ 2]} {[ 7]} {[ 2]} {[ 70207]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 8]} {[ 2]} {[ 8]} {[ 2]} {[ 80208]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 9]} {[ 2]} {[ 9]} {[ 2]} {[ 90209]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 10]} {[ 2]} {[ 10]} {[ 2]} {[ 100210]} {[ 2013]} {[ 8]} Columns 11 through 18 {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'DAY_UTC' } {'TIME_UTC' } {'LATITUDE_DECIMAL'} {'LONGITUDE_DECIMAL'} {'DEPTH_BOTTOM_M...'} {'CTDPRESSURE_DBAR'} {'CTDTEMP_ITS90_...'} {'CTDSAL_PSS78'} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5130]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4670]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4000]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4520]} {[ 7.5639]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5040]} {[ 7.5638]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4620]} {[ 7.5637]} {[ 33.8123]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4800]} {[ 7.5637]} {[ 33.8124]} {[ 21]} {[ 0.7310]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4810]} {[ 7.5647]} {[ 33.8114]} {[ 21]} {[ 0.7322]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 29.8690]} {[ 7.5750]} {[ 33.8007]} {[ 21]} {[ 0.7337]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 19.8430]} {[ 7.7612]} {[ 33.7177]} Column 19 {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'CTDSAL_FLAG'} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]}
No, it hasn't.
readcell('test2.xlsx','numheaderlines',0)
ans = 20x19 cell array
Columns 1 through 10 {'Metadaa info'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metada info2'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'EXPOCODE' } {'Cruise_flag'} {[<missing>]} {'STATION_ID'} {'CAST_NO' } {'NISKIN_ID'} {'NISKIN_FLAG'} {'SAMPLE_ID'} {'YEAR_UTC' } {'MONTH_UTC'} {'32P020130821'} {'A' } {[<missing>]} {[ 1]} {[ 2]} {[ 1]} {[ 2]} {[ 10201]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 20202]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 3]} {[ 2]} {[ 3]} {[ 2]} {[ 30203]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 4]} {[ 2]} {[ 4]} {[ 2]} {[ 40204]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 5]} {[ 2]} {[ 5]} {[ 2]} {[ 50205]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 6]} {[ 2]} {[ 6]} {[ 2]} {[ 60206]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 7]} {[ 2]} {[ 7]} {[ 2]} {[ 70207]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 8]} {[ 2]} {[ 8]} {[ 2]} {[ 80208]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 9]} {[ 2]} {[ 9]} {[ 2]} {[ 90209]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 10]} {[ 2]} {[ 10]} {[ 2]} {[ 100210]} {[ 2013]} {[ 8]} Columns 11 through 18 {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'DAY_UTC' } {'TIME_UTC' } {'LATITUDE_DECIMAL'} {'LONGITUDE_DECIMAL'} {'DEPTH_BOTTOM_M...'} {'CTDPRESSURE_DBAR'} {'CTDTEMP_ITS90_...'} {'CTDSAL_PSS78'} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5130]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4670]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4000]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4520]} {[ 7.5639]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5040]} {[ 7.5638]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4620]} {[ 7.5637]} {[ 33.8123]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4800]} {[ 7.5637]} {[ 33.8124]} {[ 21]} {[ 0.7310]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4810]} {[ 7.5647]} {[ 33.8114]} {[ 21]} {[ 0.7322]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 29.8690]} {[ 7.5750]} {[ 33.8007]} {[ 21]} {[ 0.7337]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 19.8430]} {[ 7.7612]} {[ 33.7177]} Column 19 {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'CTDSAL_FLAG'} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]}
opt=detectImportOptions('test2.xlsx')
opt =
SpreadsheetImportOptions with properties: Sheet Properties: Sheet: '' Replacement Properties: MissingRule: 'fill' ImportErrorRule: 'fill' MergedCellColumnRule: 'placeleft' MergedCellRowRule: 'placetop' Variable Import Properties: Set types by name using setvartype VariableNames: {'EXPOCODE', 'Cruise_flag', 'Var3' ... and 16 more} VariableTypes: {'char', 'char', 'char' ... and 16 more} SelectedVariableNames: {'EXPOCODE', 'Cruise_flag', 'Var3' ... and 16 more} VariableOptions: [1-by-19 matlab.io.VariableImportOptions] Access VariableOptions sub-properties using setvaropts/getvaropts VariableNamingRule: 'modify' Range Properties: DataRange: 'A10' (Start Cell) VariableNamesRange: 'A9' RowNamesRange: '' VariableUnitsRange: '' VariableDescriptionsRange: '' To display a preview of the table, use preview
opt.DataRange='A1';
readcell('test2.xlsx',opt)
ans = 23x19 cell array
Columns 1 through 10 {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metadaa info'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'Metada info2'} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing>]} {'EXPOCODE' } {'Cruise_flag'} {[<missing>]} {'STATION_ID'} {'CAST_NO' } {'NISKIN_ID'} {'NISKIN_FLAG'} {'SAMPLE_ID'} {'YEAR_UTC' } {'MONTH_UTC'} {'32P020130821'} {'A' } {[<missing>]} {[ 1]} {[ 2]} {[ 1]} {[ 2]} {[ 10201]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 20202]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 3]} {[ 2]} {[ 3]} {[ 2]} {[ 30203]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 4]} {[ 2]} {[ 4]} {[ 2]} {[ 40204]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 5]} {[ 2]} {[ 5]} {[ 2]} {[ 50205]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 6]} {[ 2]} {[ 6]} {[ 2]} {[ 60206]} {[ 2013]} {[ 8]} {'32P020130821'} {'A' } {[<missing>]} {[ 7]} {[ 2]} {[ 7]} {[ 2]} {[ 70207]} {[ 2013]} {[ 8]} Columns 11 through 18 {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing>]} {[<missing>]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'DAY_UTC' } {'TIME_UTC' } {'LATITUDE_DECIMAL'} {'LONGITUDE_DECIMAL'} {'DEPTH_BOTTOM_M...'} {'CTDPRESSURE_DBAR'} {'CTDTEMP_ITS90_...'} {'CTDSAL_PSS78'} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5130]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4670]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4000]} {[ 7.5640]} {[ 33.8121]} {[ 21]} {[ 0.7297]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4520]} {[ 7.5639]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.5040]} {[ 7.5638]} {[ 33.8122]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4620]} {[ 7.5637]} {[ 33.8123]} {[ 21]} {[ 0.7298]} {[ 44.6513]} {[ -124.1302]} {[ 46]} {[ 36.4800]} {[ 7.5637]} {[ 33.8124]} Column 19 {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {[<missing> ]} {'CTDSAL_FLAG'} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]} {[ 2]}
readcell('test2.xlsx','numheaderlines',0,'range','A1')
Error using readcell (line 162)
Supplying 'NumHeaderLines' with 'Range' or 'DataRange' is only supported when the range value is of the form 'A:B' (column-select).

Sign in to comment.


Sulaymon Eshkabilov
Sulaymon Eshkabilov on 9 Mar 2025
You can consider specifying which sheet and which range of cells to be read/imported using readcell() or readtable():
% READCELL()
D1 = readcell("tst.xlsx", Sheet=1, Range = 'A1:C5')
D1 = 5x3 cell array
{[ 1]} {[ 2]} {[ 3]} {[<missing>]} {[<missing>]} {[<missing>]} {[ 4]} {[ 5]} {[ 6]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing>]} {[<missing>]}
% READTABLE()
D2 = readtable("tst.xlsx", Sheet=1, Range = 'A1:C5')
D2 = 5x3 table
Var1 Var2 Var3 ____ ____ ____ 1 2 3 NaN NaN NaN 4 5 6 NaN NaN NaN NaN NaN NaN
  4 Comments
dpb
dpb on 9 Mar 2025
@Sulaymon Eshkabilov - "Note that readcell() does the job with its default settings as well."
No, it doesn't read the initial opening empty lines per OP's request in any of the above, the metainfo data is actually the fourth line in the Excel file, the three blank lines preceding it have not been returned.
See the <examples I added as a comment to my earlier Answer> to see the actual content of the beginning of the file.

Sign in to comment.


Matt J
Matt J on 9 Mar 2025
Edited: Matt J on 9 Mar 2025
ActiveX can be used to determine the last row/column of the worksheet: Then, you can force readcell to read in a larger range with the Range option:
[lastRow,lastCol] = getLastCell('TST.xlsx')
lastRow =
3
lastCol =
4
readcell('TST.xlsx',Range=[1,1,lastRow,lastCol])
ans =
3×4 cell array
{[<missing>]} {[<missing>]} {[<missing>]} {[<missing>]}
{[ 1]} {[ 2]} {[ 3]} {[ 50]}
{[ 4]} {[ 5]} {[ 6]} {[ 70]}
function [lastRow,lastCol] = getLastCell(filename)
sheet = 1; % Change if needed
% Open Excel via ActiveX
excel = actxserver('Excel.Application');
wb = excel.Workbooks.Open(fullfile(pwd, filename));
ws = wb.Sheets.Item(sheet);
% Get the UsedRange
range = ws.UsedRange;
% Get the first used row/column index
firstRow = range.Row; % First used row index
firstCol = range.Column; % First used column index
% Get number of rows and columns in the UsedRange
numRows = range.Rows.Count;
numCols = range.Columns.Count;
% Compute the last used row/column index
lastRow = firstRow + numRows - 1;
lastCol = firstCol + numCols - 1;
% Clean up
wb.Close(false);
excel.Quit();
delete(excel);
end
  7 Comments
dpb
dpb on 9 Mar 2025
If the lines were created by writing to somewhere other than the whole sheet...

Sign in to comment.

Products


Release

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!