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

时间:2015-05-10 08:41:52

标签: excel matlab

我使用Windows 64bit,8GB RAM和Matlab 64bit 我试图将.xlsx文件加载到matlab中。文件大小约为700MB,包含673928行和43列的工作表。

首先我使用GUI工具'uimport'。选择文件路径和名称后,GUI工具需要大约3分钟才能读取.xlsx文件,然后在表格中显示数据。如果我选择“单元阵列”,则需要大约10分钟将数据导入工作区。

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

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

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中?

谢谢!

1 个答案:

答案 0 :(得分:1)

听起来你可能正在将matcel中的excel文件保存在内存中。我建议您在导入数据后确保关闭每个excel文件的连接。

您可能还会发现Matlab表类的内存效率高于单元类。

祝你好运。

相关问题