我在1.4 MB excel文件上使用xlsread。幾次運行我的m代碼後,我開始注意到一些奇怪的行爲。Matlab xlsread打開文件並清理
- 我無法通過雙擊打開Excel文件(只能使用MATLAB)
- 2 LARGE(30MB)EXCEL.EXE * 32個文件每間運行的代碼開放前一個明確的(我稱之爲功能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填充像它應該是在這裏發生
cleanUp = onCleanup(@()xlsCleanup(Excel, file));
[numericData, textData, rawData, customOutput] = xlsreadCOM(file, sheet, range, Excel, customFun);
接着是
clear cleanUp;
這似乎是一個服務器Excel中使用
Excel = actxserver('excel.application');
清理工作看起來讀取信息在程序的稍後部分中使用
。研究表明這應該運行一個叫做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);
只是沒有結束的過程。我不知道什麼可能導致這個功能超出這個功能(不能再繼續下去),網絡上也沒有提及它的問題。請幫我解釋一下這種行爲。佔用我所有的記憶
爲什麼不立即導入整個文件而不是分別導入每個列?一次讀取整個文件應該會更快。 – slayton
在我的情況下,使用'xlsread'之後並不會發生excel文件留在taskmanager中。你可能使用類似'fopen'的東西嗎? –
我以後在mfile中使用了fopen命令,但是它用於別的東西,而且在使用調試器時我幾乎不運行它。 –