加载大的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表类比单元类更具有内存效率。
祝你好运。