Вы также можете сделать для себя то, что xlswrite делает внутри, то есть взаимодействует с помощью COM. Я предпочитаю делать это, когда у меня есть часто используемый шаблон Excel или файл данных, потому что он обеспечивает больший контроль (хотя и с большим количеством строк кода).
Excel = actxserver('Excel.Application');
Workbook = Excel.Workbooks.Open('myExcelFile.xlsx');
MySheet = Excel.ActiveWorkBook.Sheets.Item(1);
set( get(MySheet,'Range','A1:A10'), 'Value', yourValues);
...
invoke(Workbook, 'Save');
invoke(Excel, 'Quit');
delete(Excel);
Это позволит вам сохранять новые данные в новых диапазонах без повторного открытия Excel каждый раз.
Еще лучше было бы определить функцию oncleanup (как это делает xlswrite), чтобы предотвратить потерю блокировок файлов (особенно когда вы делаете такие вещи, как выход из режима отладки):
...
myWorkbook = Excel.Workbooks.Open(filename,0,true);
cleanUp = onCleanup(@()xlsCleanup(Excel, filename));
function xlsCleanup(Excel,filepath)
try
Excel.DisplayAlerts = 0; %// Turn off dialog boxes
[~,n,e] = fileparts(filepath); %// Excel API expects just the filename
fileName = [n,e];
Excel.Workbooks.Item(fileName).Close(false);
end
Excel.Quit;
end