欢迎光临散文网 会员登陆 & 注册

2020-10-14 MATLAB App Designer——uitable控件实现多列的logical联动

2020-10-14 02:59 作者:-何其-  | 我要投稿

背景

对于下面的工程,设定第一列“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判断


2020-10-14 MATLAB App Designer——uitable控件实现多列的logical联动的评论 (共 条)

分享到微博请遵守国家法律