我有“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等等..
任何人请帮帮我.. 提前致谢。任何帮助..或建议..
答案 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文件。