设置和获取 uitable

Setting and getting with uitable

我正在创建一个 Nx3 uitable,因为当 N 很高时它似乎比多个文本编辑容易得多。我将列初始化为元胞数组,以便最初获得 'empty' table.

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 在第三列中打印,所以我想一旦我知道该怎么做就可以做到 1)

EDIT2:编辑donebutton_Callback

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 命令看起来很狡猾,像这样设置 Data 会尝试设置 all 我认为的数据。而是简单地分配给特定的数据元素

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 元胞数组,然后将它们连接起来以作为数据传递给您的 table。尝试编辑数据的第 2 列时,您不能,因为您收到以下错误

Warning: Table data is not editable at this location.

这是因为(如 中所建议)您没有提供足够的数据来填充 table 的所有列。起初这令人困惑,直到您查看您的工作区...

您期望该变量为 Nx3,但实际上它是 3Nx1!在形成 DataInput:

时,您需要使用逗号连接行,而不是分号连接列
DataInput = [hinitial, hfinal, hporosity];
% Equivalently to remove ambiguity, you could use: 
% DataInput = horzcat(hinitial, hfinal, hporosity)

更新后,table 会按预期运行。