2014-10-10 45 views
0

我需要使用Activex将数据导出为具有特定名称的Excel工作表。这是我做的:首先,我将数据导出到第一个for循环,然后使用第二个for循环修改表格的名称。即使在一个循环中也可以完成吗?我认为应该有另一个更好的主意。 注意:数据大小不同。使用ActiveX写入数据并改变工作表名称 - Matlab

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 

回答

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

+0

在这种情况下,范围和页数是固定的。我如何使它变得灵活。数据的大小各不相同。 – nik 2014-10-10 09:34:08

4

xlswrite功能也接受字符串作为sheet参数。因此,仅仅通过更换您的电话这一项:

xlswrite(filename,[1 2;3 4]*i,['new_sheet_' num2str(i)]); 
相关问题