MATLAB: Store and read MAT-file as embedded file in an Excel spreadsheet

.mat fileembedexcelxlsreadxlswrite

Manually, I can insert a MAT-file in an Excel sheet and store the MAT-file by storing the Excel sheet. I can also load the MAT-file to the MATLAB workspace by double-clicking the symbol of the embedded file in Excel.
Is there a possibility to programatically store and load a MAT-file which is embedded in an XLS file?

Best Answer

Another option is to use the COM interface. You would need to be familiar with some Visual Basic to fully utilize it. I'm not an expert but here's something that could get you started. I used MSDN Library for Excel to learn about the APIs.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%Embedding MAT file
% Connect to Excel

Excel = actxserver('excel.application');
% Open an Excel workbook (false means not read-only)

Workbook = Excel.Workbooks.Open(fullfile(pwd, 'Book1.xlsx'),0,false);
% Select Sheet 1, cell B15
Workbook.Sheets.Item(1).Range('B15').Activate;
% Embedd an object
Workbook.ActiveSheet.OLEObjects.Add([], fullfile(pwd, 'mydata.mat'))
% Save workbook
Workbook.Save();
% Quit Excel

Excel.Quit();
delete(Excel);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Loading from embedded MAT file in Excel
% Connect to Excel
Excel = actxserver('excel.application');
% Open an Excel workbook (false means not read-only)
Workbook = Excel.Workbooks.Open(fullfile(pwd, 'Book1.xlsx'),0,false);
% Get the (first) embedded object from Sheet 1
obj = Workbook.Sheets.Item(1).OLEObjects.Item(1);
% "Activate" - same as double-clicking
obj.Activate
% After this command, in my Excel 2007, a dialog pops up in Excel
% asking whether it's okay to open. Click OK.
% Quit Excel
Excel.DisplayAlerts = false;
Excel.Quit();
delete(Excel);