使用 XLS 在 MATLAB 和 for 循环中读取



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

上面的代码将创建一个名为"结果"的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

问题是在循环中,您调用表示变量名称的字符串,而不是变量本身。

例如,fprintf(names1{ii})给出字符串"Apples",而不是包含值的变量 Apples

为了解决这个问题,并且对于不在工作区中持有 200 个水果的良好做法,您可以将水果定义为结构字段。然后,您可以使用动态字段名称访问它:

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

最新更新