我在一个 1.4 MB 的 excel 文件上使用 xlsread。运行我的 m 代码几次后,我开始注意到一些奇怪的行为。
- 我无法使用双击打开 excel 文件(只能使用 matlab)
- 2 LARGE (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);
只是没有结束这个过程。我不知道是什么导致了这个功能之外的问题(不能再介入了),并且网络上也没有提到它的问题。请帮我解释这种行为。占据了我所有的记忆