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

19 ビュー (過去 30 日間)
Leon
Leon 2025 年 3 月 9 日
コメント済み: dpb 2025 年 3 月 9 日
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 件のコメント
Image Analyst
Image Analyst 2025 年 3 月 9 日
編集済み: Image Analyst 2025 年 3 月 9 日
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 2025 年 3 月 9 日
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));

サインインしてコメントする。

採用された回答

dpb
dpb 2025 年 3 月 9 日
編集済み: dpb 2025 年 3 月 9 日
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
  1 件のコメント
Leon
Leon 2025 年 3 月 9 日
Many thanks! It works great. This is exactly what I need.

サインインしてコメントする。

その他の回答 (3 件)

dpb
dpb 2025 年 3 月 9 日
編集済み: dpb 2025 年 3 月 9 日
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 件のコメント
dpb
dpb 2025 年 3 月 9 日
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).

サインインしてコメントする。


Sulaymon Eshkabilov
Sulaymon Eshkabilov 2025 年 3 月 9 日
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 件のコメント
Sulaymon Eshkabilov
Sulaymon Eshkabilov 2025 年 3 月 9 日
移動済み: Matt J 2025 年 3 月 9 日
Note that I am using this online MATLAB.
dpb
dpb 2025 年 3 月 9 日
@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.

サインインしてコメントする。


Matt J
Matt J 2025 年 3 月 9 日
編集済み: Matt J 2025 年 3 月 9 日
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 件のコメント
Matt J
Matt J 2025 年 3 月 9 日
It's not a manipulation. The use case given by the OP was that the spreadsheet my contain blank initial lines.
dpb
dpb 2025 年 3 月 9 日
If the lines were created by writing to somewhere other than the whole sheet...

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpreadsheets についてさらに検索

製品


リリース

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by