使用ActiveX - Matlab将数据写入Excel并更改工作表名称

时间:2014-10-10 08:49:51

标签: excel matlab

我需要使用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

2 个答案:

答案 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”。