你也可以做自己是什么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