Hellow everyone . i am using
winopen('myfile.xlsx')
to open an excel file , after doing some modification, i want to close the excel file in order to overwrite the existing data by
xlswrite('myfile.xlsx', my_modified_data )
but sometimes i forgot to close the file manually in between and MATLAB generates an error . Is there any way to automatically close the excel file(by some command like winclose or something like that) before writing into it . Thank You all .

 Réponse acceptée

Image Analyst
Image Analyst le 21 Nov 2014

1 vote

Yes. You can use actxGetRunningServer() to connect to Excel and shut it down.

9 commentaires

pradeep kumar
pradeep kumar le 22 Nov 2014
@ Image Analyst , Thank yoy . Please explain me in detail or guide me some link . i am just a beginner to MATLAB
It's not hard:
try
% See if there is an existing instance of Excel running.
% If Excel is NOT running, this will throw an error and send us to the catch block below.
Excel = actxGetRunningServer('Excel.Application');
% If there was no error, then we were able to connect to it.
Excel.Quit; % Shut down Excel.
catch
% No instance of Excel is currently running.
end
pradeep kumar
pradeep kumar le 22 Nov 2014
@ Image Analyst . Thanks a lot Sir .
daniel
daniel le 27 Sep 2016
This actually doesn't kill the process. How do I kill the process??
KAE
KAE le 12 Juil 2017
Also if several Excel spreadsheets are open, this may not just close the one that was opened with winopen.
This will kill Excel:
system('taskkill /F /IM EXCEL.EXE');
Ihaveaquest
Ihaveaquest le 30 Mar 2023
would i be able to use PID to kill the curent open excel and not all ?
Ihaveaquest
Ihaveaquest le 30 Mar 2023
works for powerpoint as well - theres not much info online for how to with powerpoint
import mlreportgen.ppt.*
taskToLookFor = 'Powerpnt.exe';
% Now make up the command line with the proper argument
% that will find only the process we are looking for.
commandLine = sprintf('tasklist /FI "IMAGENAME eq %s"', taskToLookFor)
% Now execute that command line and accept the result into "result".
[status result] = system(commandLine)
% Look for our program's name in the result variable.
itIsRunning = strfind(lower(result), lower(taskToLookFor))
%closes powerpoints if they are open so system does not crasah when it
%tries to open a new PP
if itIsRunning
if exist('Plotted Circulator', 'file')==0
system('taskkill /F /IM POWERPNT.EXE');
end
else
end
@Ihaveaquest if Excel is open with several sheets, you can use
Excel = actxGetRunningServer('Excel.Application');
to get a handle to the Excel server, then use Excel to save the active sheet and close it.
Excel.ActiveWorkbook.Save;
Excel.ActiveWorkbook.Close(false); % The 'false' argument prevents the popup window from showing, forcing the closure without user intervention.

Connectez-vous pour commenter.

Plus de réponses (1)

Artem Smirnov
Artem Smirnov le 19 Jan 2017

0 votes

Try this:
close all

1 commentaire

Image Analyst
Image Analyst le 19 Jan 2017
And when/if you do, you'll see that close does not shutdown other processes and applications like Excel.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by