【问题标题】:Load big Excel (xlsx) file into matlab将大 Excel (xlsx) 文件加载到 matlab
【发布时间】:2015-07-20 21:06:18
【问题描述】:

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

首先我使用 GUI 工具“uiimport”。选择文件路径和名称后,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 中?

谢谢!

【问题讨论】:

    标签: excel matlab


    【解决方案1】:

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

    您可能还会发现,Matlab 表格类比单元类更节省内存。

    祝你好运。

    【讨论】:

    • 谢谢!我每次都重新启动 Matlab,并杀死 Excel 线程。但是 GUI 导入工具生成的代码仍然比 GUI 导入工具本身需要更多的时间。
    • 你能简单地将 Excel 文件加载到 Access 或更好的 SQL Server 中,然后从那里读入 Matlab 吗?
    • 另外,如果您将 .xlsx 保存为 .xlsb,文件大小可能会缩小多达 4 倍。那么,也许你可以将它加载到 Matlab 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2022-01-24
    • 1970-01-01
    • 2013-06-27
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多