For 循环遍历不同的 excel 文件和不同的工作表 (Matlab)
For loop through different excel files AND different worksheets (Matlab)
我不仅尝试遍历不同的 excel 工作表 (~125),还尝试遍历不同的 excel 文件 (~12)。我设法为工作表编写了代码,但现在我正在努力如何将其扩展到不同的 excel 文件。 excel 个文件都具有相同的结构和 number/name 个工作表。
谁能帮我?提前致谢!!
foldername = 'Raw_data';
cd(foldername);
fnames = dir('*raw.xlsx');
%% extraction of sheet name
[~, sheet_name] = xlsfinfo('Test_raw.xlsx');
%% additional array for merging later
cali=[1; 2; 5; 10; 20; 50; 100; 200; 500; 1000];
%for i=1:length(fnames) %I guess ?
for k=1:numel(sheet_name) %operation for all sheets
%extract data of one excel file, but different sheets
[~,~,raw{k}]=xlsread('Test_raw.xlsx',sheet_name{k},'A5:A14');
x=vertcat(raw{:});
end
B = reshape(x,10,k);
numind = cellfun(@isnumeric, B); %identifies numeric values
B(~numind) = {NaN} %NOT num. values to NaN
b =cell2mat(B);
final_data = [cali b];
%end
您想遍历所有 excel 文件。您已经收集了 fnames
中的所有文件名。
您基本上设置了 for-loop,唯一缺少的是将 xlsread
中的 'Test_raw.xlsx'
替换为 fnames(i).name
。
for i=1:length(fnames) %I guess ?
for k=1:numel(sheet_name) %operation for all sheets
%extract data of one excel file, but different sheets
[~,~,raw{k}]=xlsread('Test_raw.xlsx',sheet_name{k},'A5:A14');
x=vertcat(raw{:});
end
end
请注意,您必须调整 final_data 变量。
对于其中所有文件的所有数据,您可以将此变量用作 cell-array ,其中包含每个文件的一个元素。最好在进入循环之前分配这个数组
final_data = cell(length(fnames),1);
%% here go the loops
clear B
B = reshape(x,10,k);
numind = cellfun(@isnumeric, B); %identifies numeric values
B(~numind) = {NaN} %NOT num. values to NaN
b =cell2mat(B);
final_data{i} = [cali b];
B
、numind
和 b
将是每个循环被覆盖的临时工作变量。因此,在下次使用之前清除它们是一种很好的做法。
循环后,您可以使用例如访问您的数据final_data{5}
访问第五个文件。
我不仅尝试遍历不同的 excel 工作表 (~125),还尝试遍历不同的 excel 文件 (~12)。我设法为工作表编写了代码,但现在我正在努力如何将其扩展到不同的 excel 文件。 excel 个文件都具有相同的结构和 number/name 个工作表。 谁能帮我?提前致谢!!
foldername = 'Raw_data';
cd(foldername);
fnames = dir('*raw.xlsx');
%% extraction of sheet name
[~, sheet_name] = xlsfinfo('Test_raw.xlsx');
%% additional array for merging later
cali=[1; 2; 5; 10; 20; 50; 100; 200; 500; 1000];
%for i=1:length(fnames) %I guess ?
for k=1:numel(sheet_name) %operation for all sheets
%extract data of one excel file, but different sheets
[~,~,raw{k}]=xlsread('Test_raw.xlsx',sheet_name{k},'A5:A14');
x=vertcat(raw{:});
end
B = reshape(x,10,k);
numind = cellfun(@isnumeric, B); %identifies numeric values
B(~numind) = {NaN} %NOT num. values to NaN
b =cell2mat(B);
final_data = [cali b];
%end
您想遍历所有 excel 文件。您已经收集了 fnames
中的所有文件名。
您基本上设置了 for-loop,唯一缺少的是将 xlsread
中的 'Test_raw.xlsx'
替换为 fnames(i).name
。
for i=1:length(fnames) %I guess ?
for k=1:numel(sheet_name) %operation for all sheets
%extract data of one excel file, but different sheets
[~,~,raw{k}]=xlsread('Test_raw.xlsx',sheet_name{k},'A5:A14');
x=vertcat(raw{:});
end
end
请注意,您必须调整 final_data 变量。 对于其中所有文件的所有数据,您可以将此变量用作 cell-array ,其中包含每个文件的一个元素。最好在进入循环之前分配这个数组
final_data = cell(length(fnames),1);
%% here go the loops
clear B
B = reshape(x,10,k);
numind = cellfun(@isnumeric, B); %identifies numeric values
B(~numind) = {NaN} %NOT num. values to NaN
b =cell2mat(B);
final_data{i} = [cali b];
B
、numind
和 b
将是每个循环被覆盖的临时工作变量。因此,在下次使用之前清除它们是一种很好的做法。
循环后,您可以使用例如访问您的数据final_data{5}
访问第五个文件。