gpt4 book ai didi

excel - Matlab xlsread 打开文件并清理

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:08 27 4
gpt4 key购买 nike

我在一个 1.4 MB 的 Excel 文件上使用 xlsread。运行我的 m 代码几次后,我开始注意到一些奇怪的行为。

  • 我无法使用双击打开 excel 文件(只能使用 matlab)
  • 2 个大 (30Mb) EXCEL.EXE*32 个文件在清除前每次运行 m 代码打开(我调用该函数 2 次)

我觉得 matlab 没有清理它的文件句柄。我使用角到角读取的更新代码使用以下两行读取数据

prs = xlsread(file, 'data2','A2:C550');
elm = xlsread(file, 'element','A2:C65536');

任务管理器在调用两个函数后显示两个大的 EXCEL.EXE*32 文件。我试过了

clear
clear all
close all
fclose('all')
fclose(0); fclose(1); fclose(2)

等我关闭 matlab,它们仍然打开。

在尝试重新启动但没有结果后又进行了一些监听。

xlsread 使用 excel 填充看似服务器的内容以读取信息

Excel = actxserver('excel.application');

清理看起来应该在这里进行

cleanUp = onCleanup(@()xlsCleanup(Excel, file));        
[numericData, textData, rawData, customOutput] = xlsreadCOM(file, sheet, range, Excel, customFun);

接着是

clear cleanUp; 

在节目的后面。研究表明这应该运行一个名为 xlsCleanup 的清理函数。将文件复制到这里以供引用。

function xlsCleanup(Excel, filePath)
try %#ok<TRYNC> - Suppress any exception
%Turn off dialog boxes as we close the file and quit Excel.
Excel.DisplayAlerts = 0;
%Explicitly close the file just in case. The Excel API expects
%just the filename and not the path. This is safe because Excel
%also does not allow opening two files with the same name in
%different folders at the same time.
[~, n, e] = fileparts(filePath);
fileName = [n e];
Excel.Workbooks.Item(fileName).Close(false);
end
Excel.Quit;
end

首先,它在没有警告的情况下捕获异常是令人讨厌的。我检查过,但代码没有抛出异常。看来该行

Excel.Workbooks.Item(fileName).Close(false);

只是没有结束这个过程。我不知道是什么导致了这个功能之外的问题(不能再介入),而且网络上也没有提到它的问题。请帮我解释一下这种行为。占据了我所有的内存

最佳答案

范围参数也适用于角落。来自 xlsread 的文档:

num = xlsread(filename,sheet,xlRange)

Specify xlRange using the syntax 'C1:C2', where C1 and C2 are two opposing corners that define the region to read. For example, 'D2:H4' represents the 3-by-5 rectangular region between the two corners D2 and H4 on the worksheet. The xlRange input is not case sensitive, and uses Excel A1 reference style (see Excel help).

这意味着你可以这样做:

xlsread(file, 'element', 'A2:C65536');

关于excel - Matlab xlsread 打开文件并清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com