我对Matlab很新,我创建了这个脚本来帮助我从excel文件中收集4个数字。这个工作到目前为止:
clear all
cd('F:/Wortpaare Analyse/Excel')
VPNumber = input('Which Participant Number?', 's');
filename = (['PAL_',VPNumber,'_Gain_Loss.xlsx']);
sheet = 1;
x1Range = 'N324';
GainBlock1 = xlsread(filename,sheet,x1Range);
x1Range = 'O324';
LossBlock1 = xlsread(filename,sheet,x1Range);
x1Range = 'AD324';
GainBlock2 = xlsread(filename,sheet,x1Range);
x1Range = 'AE324';
LossBlock2 = xlsread(filename,sheet,x1Range);
AnalyseProband = [GainBlock1, LossBlock1, GainBlock2, GainBlock2]
现在我想创建一个脚本来分析前20个excel文件并尝试这个:
clear all
cd('F:/Wortpaare Analyse/Excel')
for VPNumber = 1:20 %for the 20 files
a = (['PAL_%d_Gain_Loss.xlsx']);
filename = sprintf(a, VPNumber) % specifies the name of the file
sheet = 1;
x1Range = 'N324';
(['GainBlock1_',VPNummer]) = xlsread(filename,sheet,x1Range);
....
end
问题似乎是我只能有一个输出参数。我想在每个循环中更改输出参数,因此它不会覆盖" GainBlock1"在每个周期中。
最后我想要这些变量: GainBlock1_1(第一张excel表) GainBlock1_2(第二张excel表) ... GainBlock1_20(第20张excel表)
有一种聪明的方法吗?我能够相当容易地编写第一个脚本,但无法在第二个脚本中产生任何重大进展。非常感谢任何帮助。
最佳, 卢卡
答案 0 :(得分:0)
这可以通过将数据存储在数组或单元格中来实现。我相信一个阵列就足以满足你的目标。我在下面添加了一个重新组织的代码示例,分解为函数,以便于阅读和理解。
基本上,第一个函数处理循环并控制数据放在数组中的位置,第二个函数是原始脚本,它接受VPNumber作为输入。
这应该返回的是一个20x4数组,其中第一个索引控制从中提取数据的工作表,第二个索引控制它是否为[GainBlock1, LossBlock1, GainBlock2, LossBlock2]
。 ie-表5的GainBlock 1为AnalseProband(5,1)
,表11的LossBlock2为AnalyseProband(11,4)
。
function AnalyseProband = getAllProbands()
currentDir = pwd;
returnToOriginalDir = onCleanup(@()cd(currentDir));
cd('F:/Wortpaare Analyse/Excel')
numProbands = 20;
AnalyseProband = zeros(numProbands,4);
for n = 1:numProbands
AnalyseProband(n,:) = getBlockInfoFromXLS(n);
end
end
function AnalyseProband = getBlockInfoFromXLS(VPNumber)
a = 'PAL_%d_Gain_Loss.xlsx';
filename = sprintf(a, VPNumber); % specifies the name of the file
sheet = 1;
x1Range = 'N324';
GainBlock1 = xlsread(filename,sheet,x1Range);
x1Range = 'O324';
LossBlock1 = xlsread(filename,sheet,x1Range);
x1Range = 'AD324';
GainBlock2 = xlsread(filename,sheet,x1Range);
x1Range = 'AE324';
LossBlock2 = xlsread(filename,sheet,x1Range);
AnalyseProband = [GainBlock1, LossBlock1, GainBlock2, LossBlock2];
end