2014-10-10 48 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)]); 
相關問題