如何将数据从Matlab导出到excel进行循环?

时间:2011-12-30 06:19:41

标签: matlab excel-2007

我有“for loop”的代码

  
    

表示i = 1:4        声明...        y = sim(net,I);     端

  

现在我需要将y的值导出到Excel工作表。因为我用过..

  
    

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

  

但我的问题是excel的ID,即“A1”应该根据每次迭代而改变...在我的情况下,迭代1-> A1,迭代 - > A2等等..

任何人请帮帮我.. 提前致谢。任何帮助..或建议..

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

你可以把xlswrite放在for循环之后。你只想做的就是将结果保存到矩阵中。这个函数可以写一个矩阵。 另外,您可以使用[]组合字符串来更改范围。

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

但是,这是一种不好的方式。你应该每次都打开并编写Excel文件。