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]; 

Bnumindb 将是每个循环被覆盖的临时工作变量。因此,在下次使用之前清除它们是一种很好的做法。

循环后,您可以使用例如访问您的数据final_data{5} 访问第五个文件。