我正在尝试将一些数据从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发布于 2019-04-16 18:49:20
问题是,在循环中,您调用的是表示变量名称的字符串,而不是变量本身。
例如,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')
endhttps://stackoverflow.com/questions/55704074
复制相似问题