通过单元格中的名称列表重命名工作区中的变量 - MATLAB

Rename a variable in the workspace through a list of names in a cell - MATLAB

我在 excel 文件中有一些数据。

首先,我读取文件并通过以下命令创建存储在单元格中的姓名列表:

[status,sheets] = xlsfinfo(filename);

我得到:

sheets = {'A1','A2','B1','B2','C1'}; 

(这些是 excel 文件中 excelsheet 的名称)

通过一些过程,我获得了每个名称的矩阵 (excelsheets)。每个的最终矩阵称为:

completeData = [x,v,z,y,s];

现在,我想:

  1. 将 "completeData" 变量的名称更改为其对应的每个 excelsheet(来自 "sheets" 单元格)。

  2. 然后用它对应的excelsheet的名称保存这个新重命名的变量(旧的"completeData")(同样来自"sheets"单元格).

到目前为止,我只设法保存了每个 excel sheet 的每个完整数据矩阵,分别使用 sheets [这是第 2 点] 的名称这个命令:

save(sprintf('%s',sheets{excelSheet}),'completeData');     

(这里我循环了 "excelsheet")

问题是,当我管理 excel sheets,并将它们全部保存在我硬盘的一个文件夹中时,每当我 运行 这些保存的变量中的任何一个我在工作区中获取 "completeData",这不是我想要的。我还想获得 excelsheet.

的名称

我该怎么做?

P.S。通过这个命令:

eval(sprintf([sheets{excelsheet} '=completeData;']));     

(再次循环 excelsheet)

我已经设法创建了几个名称为 excel sheet 的矩阵。但是我不知道如何通过循环保存这些非常好的新创建的变量,这样我就不用一个一个了。

根据上面的评论,我试着给你写了一个简单的例子:

%% Initialise

names = {'name1', 'name2', 'name3'};
data  = randn(10, 3);

%% it create three fields called name1, name2 and name3 from data, in s

for ind=1:size(data, 2)
    s.(names{ind}) = data(:, ind);
end

希望对您有所帮助!

这就是它的工作原理:

第一次阅读资料:

[status,sheets] = xlsfinfo(filename);

NamesList = sheets(:,1);

现在,应用初步收集到的资料,详细阅读一遍:

for ind = 1:length(NamesList)

    % Only read those particular sheets

    [num,txt,raw] = xlsread(filename,NamesList{ind,:});

    var.(NamesList{ind})={txt(:,MyColumn),num};

    clear num txt raw

end