我正在尝试将一些数据从MATLAB保存到excel。
这是非常重复的,我希望使用for循环来显着减少我正在使用的代码行数。
举个例子:
APPLES = rand(1,10);
PEARS = rand(1,10);
Horizon = (1:10);
% Writing to excel
xlswrite('Results.xlsx',APPLES,'Apple','B2')
xlswrite('Results.xlsx',Horizon,'Apple','B1')
%Pears
xlswrite('Results.xlsx',PEARS,'Pear','B2')
xlswrite('Results.xlsx',Horizon,'Pear','B1')
上面的代码将创建一个名为Results的Excel工作表,其中包含Apple和Pear两个工作表以及我需要的数据。
是否可以创建一个for循环来减少代码数量,因为我实际上正在使用200个水果,因此开始需要大量的空间和时间来手工编写它们?
我尝试过手动操作,这很耗时,而且我也尝试了这种方法,但这种方法不起作用:
%test
Apples = rand(1,10);
Pears = rand(1,10);
Horizon = (1:10);
names1 = {'Apples' 'Pears'};
%%
for ii = 1:length(names1)
% Writing to excel
xlswrite('Results22.xlsx',fprintf(names1{ii}),names1{ii},'B2')
xlswrite('Results22.xlsx',Horizon,names1{ii},'B1')
end
答案 0 :(得分:2)
问题在于,在循环内部您调用了代表变量名称的字符串,而不是变量本身。
例如,fprintf(names1{ii})
给出字符串'Apples',而不是包含值的变量Apples
。
要解决此问题,并且为了避免在工作区中保留200个水果,可以将这些水果定义为struct字段。然后,您可以使用dynamic field name来访问它:
fruit_names = {'Apples', 'Pears'};
Horizon = (1:10);
for k=1:length(fruit_names)
fruit.(fruit_names{k}) = rand(1,10);
xlswrite('Results22.xlsx',fruit.(fruit_names{k}),fruit_names{k},'B2')
xlswrite('Results22.xlsx',Horizon,fruit_names{k},'B1')
end