首页 文章

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

提问于
浏览
1

我使用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 回答

  • 1

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

    您可能还会发现Matlab表类比单元类更高效 .

    祝好运 .

相关问题