如何让MATLAB xlsread读取直到连续<<数据范围>>的最后一行?

我想在MATLAB中使用xlsread来读取一个Excel文件。

虽然我知道要读取哪些列,以及要从哪个行开始读取,但文件可能包含任意数量的行。

有没有办法做到这样的事情

 array = xlsread( 'filename', 'D4:F*end*' ); %% OR ANY SIMILAR SYNTAX 

F*end*是F列的最后一行?

是。 尝试这个:

 FileFormat = '.xls' or '.xlsx'; % choose one % ( by default MATLAB % imports only '.xls' ) filename = strcat( 'Filename you desire', FileFormat ); array = xlsread( filename ) % This will read all % the Matrix ( by default % MATLAB will import all % numerical data from % file with this syntax ) 

然后,您可以查看matrix的大小以优化search/导入。

 [nRows,nCols] = size( array ); 

那么如果你想要导入的matrix只是matrix的一部分,你可以这样做:

 NewArray = xlsread( filename, strcat( 'initial cell', ':', 'ColumnLetter', num2str( nRows ) ) ); % for your case: NewArray = xlsread( filename, strcat( 'D3', ':', 'F', num2str( nRows ) ) ); 

希望这可以帮助。

xls格式excel文件中, 65536似乎是可以使用的行数的限制。 你可以使用这个数字,这将基本上告诉MATLABsearch,直到文件的结尾。 这就是我从这些小小的工作中所能得到的东西,而这个技巧/黑客似乎也能正常工作。

总之,这似乎是做xls文件的诀窍 –

 array = xlsread('filename', 'D4:F65536') 

对于xlsx文件,限制似乎是1048576 ,所以代码将更改为 –

 array = xlsread('filename', 'D4:F1048576') 

确认行数限制的外部源 –

Excel版本97-2003(Windows)的文件扩展名为XLS,工作表大小为65,536行和256列。 在Excel 2007和2010中,默认的文件扩展名为XLSX,工作表大小为1,048,576行和16,384列。

你可以逐列阅读:

 col1= xlsread( 'filename', 'D:D' ); col2= xlsread( 'filename', 'E:E' ); col3= xlsread( 'filename', 'F:F' ); ... 

不要提供行号(如D12:D465),Matlab会像你期望的那样处理D:D。 col1,col2和col3将有不同的大小,具体取决于从每列中提取的数据量。

我没有尝试过这样的想法,我不知道它是否会工作:

  colAll= xlsread( 'filename', 'D:F' ); 

不是,但…

MATLAB没有logging或没有logging的function直接做这个。

直接MATLAB支持下最大可以使用的是:

 ___ = xlsread(filename,-1) opens an Excel window to interactively select data. Select the worksheet, drag and drop the mouse over the range you want, and click OK. This syntax is supported only on Windows systems with Excel software. 

但是,如何有效地处理这项任务,并确保未来的发展?

“盲”黑盒方法将首先testing你的数据存在的连续区域的边界 – 使用任何可行的迭代器,通过加倍被testing单元的盲测步长来首先进行前进步进aRowToTEST = ( aRowToStartFROM + aRowNumberDistanceToTEST ) ,如果testing单元格包含一个数字,设置aLastNonEmptyROW = aRowToTEST; 加倍aRowNumberDistanceToTEST并重复。

如果aRowToTEST指向格式特定的最大行号“后面”,设置aRowToStartFROM = aLastNonEmptyROW; 并重置前进步距aRowNumberDistanceToTEST = 1; 继续向前步进迭代步进加倍步进。 如果这再次达到极限,步骤== 1 ,但指向格式特定的限制“后面”,您的工作表包含数据,直到其最后一行(在格式特定的“边缘”上完成)。

但是一旦目标单元空/ NaN,停止向前步进阶段,并通过将find/失败(空)单元之间的间隔减半来开始标准的反步阶段aFirstEmptyROW = aRowToTEST; 和最后一个已知的单元格在一个aLastNonEmptyROW ,包含数字。

同样,如果被testing的单元格包含一个公平的值,将aLastNonEmptyROW -boundary移动到aRowToTEST值,如果不是, aFirstEmptyROW同样的方式移动aFirstEmptyROW -boundary。

最后设置aBackSteppingSTEP = ( aFirstEmptyROW - aLastNonEmptyROW )/2; aRowToTEST = aFirstEmptyROW - aBackSteppingSTEP; aBackSteppingSTEP = ( aFirstEmptyROW - aLastNonEmptyROW )/2; aRowToTEST = aFirstEmptyROW - aBackSteppingSTEP;

迭代上述直到你的步长< 1 ,因此你已经迭代地find连​​续的数据区域边界。

这种方式比原始的哑import整张工作方式更快,效率更高,并且可以工作到64k或1M或XLS rowNumber 任何更高的上限。

有了边界,只需array = xlsread( 'filename', 'D4:F<<aLastNonEmptyROW>>' );