我使用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中?
谢谢!
答案 0 :(得分:1)
听起来你可能正在将matcel中的excel文件保存在内存中。我建议您在导入数据后确保关闭每个excel文件的连接。
您可能还会发现Matlab表类的内存效率高于单元类。
祝你好运。