我需要使用Activex将数据导出到具有特定名称的Excel工作表。这就是我所做的:首先我将数据导出到excel,然后在第一个for循环中,然后使用second for循环修改工作表的名称。甚至可以在一个单独的for循环中完成它吗?我认为应该有另一个更好的主意。 注意:数据大小各不相同。
try
filename = fullfile(pwd,'example.xlsx');
for i=1:5
xlswrite(filename,[1 2;3 4]*i,i);
end
for i = 1:5
myExcel = actxserver('Excel.Application');
excelWorkBook = myExcel.Workbooks.Open(filename,0,false);
excelWorkBook.Worksheets.Item(i).Name = ['new_sheet_' num2str(i)];
excelWorkBook.Save;
excelWorkBook.Close;
myExcel.Quit;
end
catch
% Disp Error message.....
end
答案 0 :(得分:4)
xlswrite
函数也接受一个字符串作为sheet
参数。所以只需用这个替换你的电话:
xlswrite(filename,[1 2;3 4]*i,['new_sheet_' num2str(i)]);
答案 1 :(得分:1)
Fratyx的答案是最简单的实现,但对Excel对象模型的一些了解有很长的路要走,所以这里是如何在一个循环中用ActiveX实现你的解决方案:
e = actxserver('excel.application');
w = e.Application.Workbooks.Add();
numnewsheets = 4;
for i = 1:numnewsheets
w.Worksheets.Add([],w.Sheets.Item(w.Sheets.Count),1);
w.Worksheets.Item(i).Name = ['new_sheet_' num2str(i)];
w.Worksheets.Item(i).Cells.Range('A1:B2').Value = [1 2;3 4];
end
w.SaveAs(filename)
w.Close
e.Quit
e.delete
要计算数据大小所需的范围,您必须打开文件“xlswrite”并复制子函数“calcrange”。