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

时间:2016-09-28 14:12:47

标签: excel matlab matrix cell

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

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

[status,sheets] = xlsfinfo(filename);

我得到了:

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

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

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

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

现在,我想:

  1. 将“completeData”变量的名称更改为每个相应的excelsheet(来自“sheet”单元格)。

  2. 然后将这个新重命名的变量(旧的“completeData”)与其相应的excelsheet的名称一起保存(再次从“sheet”单元格)。

  3. 到目前为止,我只是通过这个命令设法保存每个excel表单的每个completeData矩阵和表单的名称[点号2]:

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

    (这里我有一个循环“excelsheet”)

    问题在于,当我有macel excel表,并将所有这些保存在我的硬盘文件夹中时,每当我运行任何这些保存的变量时,我在工作区中得到“completeData”,这不是我想要的。我想得到excelsheet的名称。

    我该怎么做?

    P.S。通过这个命令:

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

    (excelsheet上的另一个循环)

    我设法创建了几个带有excel表名称的矩阵。但我不知道如何通过循环保存这些非常好的新创建的变量,这样我就不会一个接一个地保存。

2 个答案:

答案 0 :(得分:1)

按照上面的评论,我试着写一个简化的例子:

%% 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

希望它有所帮助!

答案 1 :(得分:0)

这就是它的工作原理:

首先阅读信息:

[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