2020-10-14 MATLAB App Designer——uitable控件实现多列的logical联动
背景
对于下面的工程,设定第一列“T/F”为总的logical列,实现的功能:当“Sheet1”列和“时程”列,同行单元格均为false,则同行“T/F”列为false ,其他不做更改
这样,确保我按行从上到下判断是否要参与计算时,首先勾选“T/F”列,再勾选或审核需要进行分析的单元格,若勾选“T/F”列错误,设定后续指定列不会变动
黑色单元格不参与logical判断

核心代码
% PreTableData % 原有表格控件内容;
% sourceData = source.Data;
% LockedColID % 被锁定的表格列,必须紧挨着且必须从第二列开始
IDUnSameCell = ~eq(cell2mat(sourceData(:,[1,LockedColNum+2:end])),...
cell2mat(PreTableData(:,[1,LockedColNum+2:end])));
if max(max(IDUnSameCell))==1 % 存在更新的内容
if max(max(IDUnSameCell(:,1))==1)==1 % T/F列 选中
RowIDUnSameCell=IDUnSameCell(:,1)==1; % 获取更改行
if max(cell2mat(sourceData(RowIDUnSameCell,LockedColNum+2:end)))~=1 % 操作后工作簿列均为空
sourceData(RowIDUnSameCell,LockedColNum+2:end)={1};
end
else % 工作簿列
RowIDUnSameCell=(max(IDUnSameCell(:,2:end),[],2)==1); % 获取更改行
if max(cell2mat(sourceData(RowIDUnSameCell,LockedColNum+2:end)))~=1 % 操作后工作簿列均为空
sourceData(RowIDUnSameCell,1)={0};
end
end
end
测试
表格控件未更改前的结果如上图,按下面要就执行表格格logical的更改:
(1)第1行,“T/F”列设置为false
(2)第2行,“时程”列设置为false
(3)第3行,“时程”列设置为true
(4)第6行,“Sheet1”列和“时程”列均为false
(5)第7列,“时程”列为false

黑色单元格不参与logical判断