2020-10-14 MATLAB App Designer——uitable控件實(shí)現(xiàn)多列的logical聯(lián)動(dòng)
背景
對(duì)于下面的工程,設(shè)定第一列“T/F”為總的logical列,實(shí)現(xiàn)的功能:當(dāng)“Sheet1”列和“時(shí)程”列,同行單元格均為false,則同行“T/F”列為false?,其他不做更改
這樣,確保我按行從上到下判斷是否要參與計(jì)算時(shí),首先勾選“T/F”列,再勾選或?qū)徍诵枰M(jìn)行分析的單元格,若勾選“T/F”列錯(cuò)誤,設(shè)定后續(xù)指定列不會(huì)變動(dòng)
黑色單元格不參與logical判斷

核心代碼
% PreTableData % 原有表格控件內(nèi)容;?
% sourceData = source.Data;
% LockedColID % 被鎖定的表格列,必須緊挨著且必須從第二列開始
IDUnSameCell = ~eq(cell2mat(sourceData(:,[1,LockedColNum+2:end])),...
? ? cell2mat(PreTableData(:,[1,LockedColNum+2:end])));
if max(max(IDUnSameCell))==1 % 存在更新的內(nèi)容
? ? 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
測(cè)試
表格控件未更改前的結(jié)果如上圖,按下面要就執(zhí)行表格格logical的更改:
(1)第1行,“T/F”列設(shè)置為false
(2)第2行,“時(shí)程”列設(shè)置為false
(3)第3行,“時(shí)程”列設(shè)置為true
(4)第6行,“Sheet1”列和“時(shí)程”列均為false
(5)第7列,“時(shí)程”列為false

黑色單元格不參與logical判斷