在MATLAB和forloop中使用XLS读取

时间:2019-04-16 08:47:10

标签: matlab for-loop

我正在尝试将一些数据从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

1 个答案:

答案 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