加载大的Excel(xlsx)文件到matlab中

我使用Windows 64位与8GB内存和Matlab 64位。
我试图加载一个.xlsx文件到matlab中。 文件大小约700MB,包含673928行和43列的表。

首先我使用GUI工具“uiimport”。 select文件path和名称后,GUI工具需要大约3分钟时间才能读取.xlsx文件,然后在表中显示数据。 如果select“单元arrays”,则需要大约10分钟才能将数据导入到工作区。

>>whos Name Size Bytes Class Attributes NBPPdataV3YOS1 673928x43 3473588728 cell 

它工作得很好,但我有很多.xlsx文件来导入。 使用GUI工具导入每个文件是不可能的。 所以我使用GUI工具来生成这样的function

 function data = importfile(workbookFile, sheetName, range) %% Import the data [~, ~, data] = xlsread(workbookFile, sheetName, range); data(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),data)) = {''}; 

简而言之,我忽略了一些不相关的代码。 但是,当我用这个函数导入数据时,效果不好。 Matlab和Excel使用的RAM大大增加,直到几乎所有的RAM都被使用。 即使30分钟后也无法导入数据。

我也尝试这样做,

 filename='E:\data.xlsx'; excelObj = actxserver('Excel.Application'); fileObj = excelObj.Workbooks.Open(filename); sheetObj = fileObj.Worksheets.get('Item', 'sheet2'); %Read in ranges the same way as xlsread! indata = sheetObj.Range('A1:AQ673928').Value; 

xlsread()发生同样的问题。

我的问题是:
1. GUI导入工具是否使用xlsread()来读取.xlsx文件? 如果是,为什么生成的函数不起作用? 如果没有,它使用哪个接口?
2.有没有一种有效的方法来加载Excel文件到Matlab?

谢谢!

这听起来像你可能会保持在Matlab中的内存中的Excel文件。 我build议您在导入数据后确保closures每个excel文件的连接。

你也可能发现Matlab表类比单元类更具有内存效率。

祝你好运。