Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用uitable设置和获取_Matlab_User Interface_Matlab Uitable - Fatal编程技术网

Matlab 使用uitable设置和获取

Matlab 使用uitable设置和获取,matlab,user-interface,matlab-uitable,Matlab,User Interface,Matlab Uitable,我正在创建一个Nx3 uitable,因为它似乎比N高时的多个文本编辑容易得多。我将列初始化为单元格数组,以便最初获得一个“空”表 hinitial = cell(N,1); hfinal = cell(N,1); hporosity = cell(N,1); DataInput = [hinitial;hfinal;hporosity]; ColumnName = {'n_Initial','n_Final','Porosity'}; ColumnFormat = {'numeric', 'n

我正在创建一个Nx3 uitable,因为它似乎比N高时的多个文本编辑容易得多。我将列初始化为单元格数组,以便最初获得一个“空”表

hinitial = cell(N,1);
hfinal = cell(N,1);
hporosity = cell(N,1);
DataInput = [hinitial;hfinal;hporosity];
ColumnName = {'n_Initial','n_Final','Porosity'};
ColumnFormat = {'numeric', 'numeric', 'numeric'};
ColumnEditable = [false true false];

htable = uitable(fig,'Units','pixels','Position',[20 20 260 204],...
         'Data', DataInput,...
         'ColumnName', ColumnName,...
         'ColumnEditable', ColumnEditable);  
1) 用这个按钮,我想循环打印数据到第一列

function uploadbutton_Callback(source,eventdata) 
S = load('n.mat');
for K = 1:N
set(htable(K,1),'Data',num2cell(S.n(K)));
end
end
但这只会打印该列的第一行。然后显示此错误

Index exceeds matrix dimensions.
Error in bandprovaprog/uploadbutton_Callback (line 122)
set(htable(K,1),'Data',num2cell(S.n(K)));
Error while evaluating UIControl Callback.
2) 在第二列中,我想手动输入数据,然后使用按钮将结果保存在mat文件中。到目前为止,我的努力是:

function donebutton_Callback(source,eventdata) 

m = zeros(1,N);
 for J = 1:N
 m(J) = str2double(get(hfinal{J},'String'));  
 end
save('m.mat','m');
end
3) 最后一列在第三列中再次使用set to print,因此我认为我可以在知道如何执行后执行1)

编辑2:编辑donebutton_回调

function donebutton_Callback(source,eventdata) 

 m = zeros(1,N);
 m(1:N) = str2double(htable.Data(1:N,2),'Data'); 
 save('m.mat','m');
end
我想把第二列的内容放在m.mat中

1)您的
set
命令似乎不可靠,这样设置
数据
将尝试设置我认为所有的数据。而是简单地分配给特定的数据元素

function uploadbutton_Callback(source,eventdata) 
    S = load('n.mat');
    for K = 1:N
        htable.Data{K,1} = S.n(K);
    end 
end
更好的方法是将代码矢量化,避免循环

function uploadbutton_Callback(source,eventdata) 
    S = load('n.mat');
    htable.Data(1:N,1) = num2cell(S.n(1:N));
end
与(2)类似,不要使用
get
,只需访问如上所示的数据即可


编辑:

你的新问题如下。您正在创建3个Nx1单元数组,然后将它们连接起来作为数据传递到表中。当试图编辑数据的第2列时,由于出现以下错误,无法编辑

警告:表格数据在此位置不可编辑

这是因为(如中所建议)您没有提供足够的数据来填充表中的所有列。这在一开始是令人困惑的,直到你查看你的工作区

您希望该变量是Nx3,但实际上它是3Nx1!在形成
DataInput
时,需要使用逗号连接行,而不是分号连接列:

DataInput = [hinitial, hfinal, hporosity];
% Equivalently to remove ambiguity, you could use: 
% DataInput = horzcat(hinitial, hfinal, hporosity)

更新后,表将按预期运行。

非常感谢!当我尝试(2)并在第二列中键入一个数字时,尽管它告诉我,我的表格在该位置不可编辑,即使我将该列设置为可编辑。在(2)中,你没有编辑表格,所以我不知道你的意思。。。请发布实际的错误信息,我只是想在表中手动输入数据,然后按“完成”将数据保存到mat文件中。虽然当我在表格中输入一个值时,当我按enter键并移动到下一个值时,它会消失。出现此橙色警告:
表数据在此位置不可编辑
。我的donebutton_回调现在已编辑,出现另一个错误
索引超出矩阵维度
。请在您的问题中也更新它(请注意,这是一个编辑并将其添加到末尾),否则我无法猜测您为什么会出现错误。。。