Matlab AppDesigner:Excel中的列表框



我正在应用程序设计器中创建一个应用程序。我想做的是,当选择一个或多个选项时,这些选项的值为1。

列表(即"列"(按以下方式读取,列表选项被分配给默认值为0的结构变量。

table1 = readtable("file.xls");
for i = 1:length(rmmissing(table1{:,"Column"}))
s.(char(rmmissing(table1{i,"Column"}))) = 0;
end

这将输出下表。

s.Anna = 0 
s.Bett = 0
s.Cyrielle = 0
s.Dylan = 0

我的问题是,每当我突出显示其中一个选项时,我都无法找到将值从0更新为1的方法。我不知道如何从本质上获取选定的值并更新它。

例如,如果我突出显示";安娜;以及";Cyrielle";,这些应该更新为1,如下所示。

s.Anna = 1
s.Bett = 0
s.Cyrielle = 1
s.Dylan = 0 

我试了一个if语句。虽然这很有效,但这意味着我必须对名字进行硬编码,这是我不想要的。因此,它需要动态地挑选出所选择的名称。

if app.ColumnListBox.Value == "Anna"
s.Anna = 1;
else
s.Anna = 0;
end

列表框如下所示:列表框

当选择一个名称时,我得到的输出是:

s = 
struct with fields:
Anna: 1
Bett: 0
Cyrielle: 0
Dylan: 0

但是,如果我选择了多个选项,则所有选项都将为0:多个名称

s = 
struct with fields:
Anna: 0
Bett: 0
Cyrielle: 0
Dylan: 0

现在的代码如下:

names = fieldnames(s);
for j = 1:numel(names)
name = names{j};
if app.ListBox.Value == string(name)
s.(name) = 1;
else
s.(name) = 0;
end
end
assignin("base","s",s)  

任何帮助都将不胜感激!

您应该能够使用之类的东西来减少if条件的硬编码

names = fieldnames(s);
for iField = 1:numel(names)
% Assign current name to variable, e.g. "Anna"
name = names{iField};
% loop over the fields and check if selected
if app.ColumnListBox.Value == string(name)
s.(name) = 1;
else
s.(name) = 0;
end

相关内容

  • 没有找到相关文章

最新更新