MATLAB: Does reading some Excel data via ACTXSERVER return an error if I open another Excel file outside of MATLAB

MATLAB

I have a large Excel file full of numerical data that I am trying to read in the following way:
hExcel = actxserver('excel.application');
hExcel.Workbooks.Open('test.xlsx');
data = hExcel.Worksheets.Item('Sheet1').UsedRange.Value;
hExcel.Quit;
delete(hExcel)
The data is read correctly when I run the code. However, I obtain the following error if I open an Excel file outside of MATLAB while the code is running:
Error using Interface.000208D7_0000_0000_C000_000000000046/Item
Invoke Error, Dispatch Exception: Invalid index.
Error in example_actxserver_read (line 4)
data = hExcel.Worksheets.Item('Sheet1').UsedRange.Value;

Best Answer

This error occurs because the 'UsedRange' method reads data from the currently active worksheet on the Excel process, which is also the last opened Excel file.
In order to work around this issue, you should read the data using the file handle returned by the Open method instead of the handle returned by ACTXSERVER as demonstrated in the following example:
hExcel = actxserver('excel.application');
excelFileHandle = hExcel.Workbooks.Open('test.xlsx');
data = excelFileHandle.Worksheets.Item('Sheet1').UsedRange.Value;
excelFileHandle.Close;
hExcel.Quit;
delete(hExcel)
Please note that there is only one Excel process, even if you double click the file in a file explorer. Therefore, both Excel files will be closed by running hExcel.Quit as this kills the Excel process.