2011-12-30 956 views
1

我有一个代码 “for循环”如何将数据从Matlab导出为Excel循环?

对于i = 1:4 语句... Y = SIM(净,I); 端

现在我需要y的值导出到Excel工作表。对于我用..

xlswrite( 'output_data.xls',Y 'output_data', 'A1')

但我的问题在于:Excel即的ID “A1”应该根据每次迭代...在我的情况下,为迭代1-> A1,迭代 - > A2等。

任何人请帮助我.. 在此先感谢。对于任何帮助..或建议..

回答

0

你可以把xlswrite放在for循环之后。你只需要做的就是将结果保存在一个矩阵中。这个函数可以写一个矩阵。 也可以用[]来组合字符串来改变范围。

>> for i=1:4 
Range=['A' num2str(i)] 
end 
Range = 
A1 
Range = 
A2 
Range = 
A3 
Range = 
A4 

但是,这是一个坏的方法。您应该每次打开和写入Excel文件。

+0

感谢您的帮助。 。它真的帮了我很多... – 2011-12-30 09:56:27

4

您可以将sim输出存储在一个向量中(y(ii))并使用单次写入保存在工作表中。由于您执行的是单个批量写入而非许多小写操作,因此这也更加高效。

指定第一个单元格,并从那里开始编写y

last = someNumber; 
for i=1:last statement... y(i)=sim(net, I); end 

xlswrite('output_data.xls', y', 'output_data', 'A1'); 

如果你喜欢指定范围写['A1:A',num2str(last)]而不是A1

如果你真的想在循环中尝试写:

for ii=1:last 
    ... 
    y=sim(net, I); 
    xlswrite('output_data.xls', y, 'output_data', sprintf('A%d',ii)); 
end 
+1

谢谢你的回答..我用 >> xlswrite('output_data.xls',y,'output_data',['A'num2str(count)]) – 2012-01-02 07:39:37

2

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